正则表达式有助于用逗号识别数字

时间:2015-12-18 11:42:24

标签: python regex

我正在学习Python并通过#34;使用Python自动化无聊的东西"。以下问题出现在Regex章节中:

你如何编写一个与逗号匹配的正则表达式 每三位数?它必须符合以下条件:

  • ' 42'
  • ' 1234'
  • ' 6368745'

但不是以下内容:

  • ' 12,34,567' (逗号之间只有两位数字)
  • ' 1234' (缺少逗号)

书中的答案如下:

re.compile(r'^\d{1,3}(,{3})*$')  #will create this regex, but other regex strings can produce a similar regular expression.

然而,当我尝试这个时,它无法识别1,234这样的数字。在shell中我输入:

numRegex = re.compile(r'^\d{1,3}(,{3})*$')

我的搜索产生以下内容:

numRegex.search('42')

< _sre.SRE_Match对象; span =(0,2),match =' 42'>

numRegex.search('1,234')
numRegex.search('6,368,745')
numRegex.search('1234')
numRegex.search('36')

< _sre.SRE_Match对象; span =(0,2),match =' 36'>

事实证明正则表达式返回1000以下值的结果,但当数字高于3位数时,逗号或否,我得不到结果。建议?

阿德里安

1 个答案:

答案 0 :(得分:-2)

如果您希望将数字与数千个分隔符匹配,则需要在正则表达式中修正拼写错误:

if

现在,如果您还要匹配没有逗号的数字,您还需要将其设为可选:

re.compile(r'^\d{1,3}(,\d{3})*$')

没有捕获组的更快版本(更快):

re.compile(r'^\d{1,3}(,?\d{3})*$')