示例字符串:
- 我是一个数字字符串 75698
- 我是一个字母数字字符串 A14-B32-C7D
到目前为止,我的正则表达式有效:(\S+)$
我想添加一种方法(可能向前看)来检查上述正则表达式生成的结果是否包含任何数字(0-9)一次或多次?
这不起作用:(\S+(?=\S*\d\S*))$
我该怎么做?
置换它并使用\D
该类而不是\S
:
((?=\D*\d)\S+)$
解释:\D = [^\d]
换句话说,它就是所有不是数字的东西。
您可以通过以下方式更明确(为您的示例提供更好的性能):
((?=[a-zA-Z-]*\d)\[a-zA-Z\d-]+)$
如果你只有大写字母,你知道该怎么做。(类越小,正则表达式越好)
text = '''
I am a numeric string 75698 \t
I am a alphanumeric string A14-B32-C7D
I am a alphanumeric string A14-B32-C74578
I am an alphabetic number: three
'''
import re
regx = re.compile('\s(?=.*\d)([\da-zA-Z-]+)\s*$',re.MULTILINE)
print regx.findall(text)
# result ['75698', 'A14-B32-C7D', 'A14-B32-C74578']
请注意\s*
前面的存在,$
以便捕获从行尾用空格分隔的字母数字部分。