regex 检查字符串是否包含数字,它们仅位于字符串的末尾

bf1o4zei  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(136)

字符串可以只包含字母,但如果它有数字,它们不能有任何字母后。RYAN93有效。RYAN93G无效。
我尝试使用for循环来检查字符串中的每个字符是否存在.isnumeric()。如果是这样,我将检查.isalpha()。但这仍然会检查整个字符串,因此我不会得到我要查找的结果。

im9ewurl

im9ewurl1#

使用re.search

import re

strs = ['RYAN93', 'RYAN93G', '93', 'RYAN92G3']

for s in strs:
    if re.search(r'^[A-Za-z]+[0-9]*$', s):
        print(s)

字符串
打印:

RYAN93

w51jfk4q

w51jfk4q2#

您可以使用regex来满足您的需求。
re.compile(r'[a-z]+\d*$', re.I)-这个表达式表示:

  • [a-z]+一个或多个字母字符
  • \d*零位或多位
  • $直到字符串的末尾
  • re.I不区分大小写匹配

match从字符串的开头开始匹配,因此没有必要在表达式中具体说明。

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]

字符串

au9on6nz

au9on6nz3#

regex确实可以工作,但对于这样一个简单的任务来说,它有点过头了。简单地从字符串的结尾到开头循环;如果你以字符串开始,那么你不应该遇到任何数字。如果你以数字开始,那么你就可以开始了:

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)}")

字符串
我讨厌这样做,但因为@OysterShucker忍不住,这里证明了O(n)比O(n^2)更好,正则表达式不是某种黑魔法。
x1c 0d1x的数据

相关问题