正则表达式严格检查字符串中的数字

时间:2013-05-14 11:35:54

标签: python regex

示例字符串:

  1. 我是数字字符串75698
  2. 我是字母数字字符串A14-B32-C7D
  3. 到目前为止,我的正则表达式有效:(\S+)$

    我想添加一种方法(可能是向前看)以检查上面的正则表达式生成的结果是否包含任何数字(0-9)一次或多次?

    这不起作用:(\S+(?=\S*\d\S*))$

    我该怎么做?

3 个答案:

答案 0 :(得分:1)

对其进行置换并使用\D类而不是\S

((?=\D*\d)\S+)$

解释:\D = [^\d]换句话说,这不是一个数字。

您可以通过以下方式更明确地(更好地展示您的示例)

((?=[a-zA-Z-]*\d)\[a-zA-Z\d-]+)$

如果你只有大写字母,你知道该怎么做。 (等级越小,正则表达越好)

答案 1 :(得分:1)

没有必要向前看,这很简单:

(\S*\d+\S*)

这是一个测试用例:

http://regexr.com?34s7v

答案 2 :(得分:0)

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*前面$的存在,以便捕捉从行末端用白色分隔的字母数字部分。