例字符串:正则表达式来严格检验数字符串
- 我是一个数字串75698
- 我是一个字母数字字符串,A14,B32-C7D
到目前为止,我的正则表达式的工作原理: (\S+)$
我想添加一个方法(可能会向前看)来检查上面的正则表达式生成的结果是否包含任何数字(0-9)一次或多次?
这不是工作:(\S+(?=\S*\d\S*))$
应该怎么办呢?
例字符串:正则表达式来严格检验数字符串
到目前为止,我的正则表达式的工作原理: (\S+)$
我想添加一个方法(可能会向前看)来检查上面的正则表达式生成的结果是否包含任何数字(0-9)一次或多次?
这不是工作:(\S+(?=\S*\d\S*))$
应该怎么办呢?
置换,并使用\D
类,而不是\S
:
((?=\D*\d)\S+)$
解释:\D = [^\d]
换句话说,它是所有这不是一个数字。
你可以用更明确的(对于你的例子更好的性能):
((?=[a-zA-Z-]*\d)\[a-zA-Z\d-]+)$
,如果你只有大写字母,你知道该怎么做。 (小是类,更好的是正则表达式)
你能解释\ D请 – Neutralizer 2013-05-14 11:39:15
@UmairAshraf:看我的编辑。 – 2013-05-14 11:43:37
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*
的存在,以便捕获从末尾用白色隔开的字母数字部分o线条。
你是说它不能包含同一个数字两次吗? – 2013-05-14 16:08:20
它必须包含一个或多个数字(0-9) – Neutralizer 2013-05-14 16:14:36
您是否知道您的正则表达式还允许各种Unicode字符? – nhahtdh 2013-05-14 16:40:36