import re
items = ['939393', 'RYAN', 'RYAN93', 'RYAN93RYAN', 'RYAN93RYAN93']
match = re.compile(r'[a-z]+\d*$', re.I).match
valid = [item for item in items if match(item)]
print(valid) #[RYAN, RYAN93]
strs = ['RYAN93', 'RYAN93G', 'ABCD', 'ABC123GH4', 'RYAN93G93']
def verify(s):
is_previous_char_numeric = s[-1].isnumeric()
for char in s[-2::-1]:
if char.isnumeric() and not is_previous_char_numeric:
return False
is_previous_char_numeric = char.isnumeric()
return True
for s in strs:
print(f"Is {s} formatted correctly? {verify(s)}")
3条答案
按热度按时间im9ewurl1#
使用
re.search
:字符串
打印:
型
w51jfk4q2#
您可以使用regex来满足您的需求。
re.compile(r'[a-z]+\d*$', re.I)
-这个表达式表示:[a-z]+
一个或多个字母字符\d*
零位或多位$
直到字符串的末尾re.I
不区分大小写匹配match
从字符串的开头开始匹配,因此没有必要在表达式中具体说明。字符串
au9on6nz3#
regex确实可以工作,但对于这样一个简单的任务来说,它有点过头了。简单地从字符串的结尾到开头循环;如果你以字符串开始,那么你不应该遇到任何数字。如果你以数字开始,那么你就可以开始了:
字符串
我讨厌这样做,但因为@OysterShucker忍不住,这里证明了O(n)比O(n^2)更好,正则表达式不是某种黑魔法。
x1c 0d1x的数据