2017-08-14 25 views
-1

我不是正则表达式好,我花了这么多时间搞清楚如何搜索以下模式:正则表达式的字符串,“16个问题”,

,\"16 questions\", 

这是我构建.\"[0-9,]+ questions\".
我觉得我很接近但不知道多少。有人可以纠正它。数字越过1k时,数字值可以包含逗号。例如2,500个问题。

+1

您的模式是否真的让您失望?来自不可靠来源的输入是否需要严格验证?你在编写什么语言?这项任务的目标是什么?提取号码?替换文字?验证字符串? – mickmackusa

回答

3
,"\d{1,3}(,\d{3,3})*\squestions?", 

说明:

  • \d{1,3} = 1〜3个十进制数字
  • (,\d{3,3})* =逗号和3个十进制数字,全组重复0〜N次
  • \s =空白
  • s? =字母s可能会丢失

这两部分可以让您准确识别可能的数字。

Test and visualization.

如果在文本中的反斜杠是真正的反斜杠,然后包括他们的正则表达式将

,\\"\d{1,3}(,\d{3,3})*\squestions?\\", 
+0

正则表达式打破'21,3133个问题'不应该接受。 – shockawave123

+2

@ shockawave123 - 对不起,我不确定你想说什么,你的句子不给我语法意义。什么是“正则表达式打破”? '21,3333'与这个正则表达式不匹配,这是正确的。 – miroxlav

+0

您的正则表达式接受不是数字的字符串。以链接为例。 https://regex101.com/r/ZyQIdh/1 – shockawave123

0

这工作。您没有指出数值是否可以超过1个逗号(例如1,000,000)

,\\"((\d{1,3})(,\d{3})*)\squestions?\\", 
+0

这匹配',“1,2,3,4,5,6问题”' – Toto

+0

对不起。我纠正了它。 – Anthony

相关问题