如何使每三位数字与逗号匹配的正则表达式?

时间:2016-10-04 05:53:22

标签: python regex

我是Python和正则表达式的初学者,现在我尝试处理一个练习,听起来像这样:

  

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

     

'42'

     

'1234'

     

'6368745'

     

但不是以下内容:

     

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

     

'1234'(缺少逗号)

我觉得这很容易,但我已经花了几个小时仍然没有写回答。甚至连本练习书中的答案根本不起作用(书中的模式是^\d{1,3}(,\d{3})*$

提前谢谢!

5 个答案:

答案 0 :(得分:1)

你书中的答案对我来说似乎是正确的。它适用于您提供的测试用例。

(^\d{1,3}(,\d{3})*$)

'^'符号表示在行的开头搜索整数。 d{1,3}告诉我应该至少有一个整数但不超过3个;

1234,123 

无效。

(,\d{3})*$

这个表达式告诉我们应该有一个逗号,后面跟三个整数一样多。

也许您正在寻找的答案是:

(^\d+(,\d{3})*$)

每三位数字与逗号匹配,而不会限制逗号之前大于3位的数字。

答案 1 :(得分:0)

你可以使用它(这是本书指定的稍微改进的版本):

^\d{1,3}(?:,\d{3})*$

Demo on Regex101

答案 2 :(得分:0)

我通过将胡萝卜和美元之间的东西放在括号中来完成工作: <div class="suppliers-blog-thumbnail"> <a target="_blank" class="image_center" href="http://amico-securityproducts.com/lath.htm"> <div class="bg-responsive" style="background-image: url('http://workspace3.joefoster.org/wp-content/uploads/2017/09/7b6442_1488bc59e28f439b89b942afef0f7646-mv2.gif');"></div> <span class="suppliers-overlay">&nbsp;</span> </a> </div> 但是我发现这个正则表达式没用,因为你不能用它在文档中找到这些数字,因为字符串必须以完全短语开头和结尾。

答案 3 :(得分:0)

#This program is to validate the regular expression for this scenerio. 
#Any properly formattes number (w/Commas) will match.
#Parsing through a document for this regex is beyond my capability at this time.

print('Type a number with commas')
sentence = input() 

import re

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

matches = pattern.match(sentence)
if matches.group(0) != sentence:
    #Checks to see if the input value
    #does NOT match the pattern.
    print ('Does Not Match the Regular Expression!')

else:
    print(matches.group(0)+ ' matches the pattern.')
    #If the values match it will state verification.

答案 4 :(得分:0)

简单的答案是:

^\d{1,2}(,\d{3})*$   
^\d{1,2} - should start with a number and matches 1 or 2 digits.    
(,\d{3})*$ - once ',' is passed it requires 3 digits.

适用于本书中的所有场景。 在 https://pythex.org/

上测试您的场景