如何编写一个Python正则表达式来匹配既有单词又有数字的字符串,不包括只包含数字的字符串?

tvokkenx  于 2023-05-21  发布在  Python
关注(0)|答案(3)|浏览(84)

我想写一个正则表达式来匹配一个可能同时包含单词和数字而不仅仅是数字的字符串。
我使用了这个正则表达式[A-z+\d*],但它不起作用。
一些匹配的样本:

expression123
123expression
exp123ression

不匹配样本:

1235234567544

你能帮我解决这个问题吗?先谢谢你了

e4yzc0pl

e4yzc0pl1#

快来救援!

^(?!\d+$)\w+$

这使用了负先行构造和锚点,请参见a demo on regex101.com
请注意,仅使用纯Python代码也可以得到相同的结果:

samples = ["expression123", "123expression", "exp123ression", "1235234567544"]
 
filtered = [item for item in samples if not item.isdigit()]
print(filtered)

# ['expression123', '123expression', 'exp123ression']

参见another demo on ideone.com
使用这两种方法,您都不会考虑像-11.0这样的输入字符串(它们是允许的)。

4smxwvx5

4smxwvx52#

另一个解决方案:只需在字符串中搜索除数字以外其他字符:

import re

data = [
'expression123',
'123expression',
'exp123ression',
'1235234567544'
]

for t in data:
    m = re.search(r'\D', t)
    if m:
        print(t)

图纸:

expression123
123expression
exp123ression
gwbalxhn

gwbalxhn3#

您可以尝试匹配以下正则表达式。

^(?:\w*[a-zA-Z_]\w*)?$

Demo
这匹配空字符串。如果字符串必须包含至少一个字符,则可以简化为

^\w*[a-zA-Z_]\w*$

相关问题