我要捕获除4位数字外的所有数字,包括逗号或不用逗号分隔的数字:
我想要匹配这些数字(在我的例子中,数字总是由3位数字分隔)
978,763,835,536,363
123
123,456
123456
7456
3400排除像这样的年份
1200 till 2020我写了这篇文章
regex_patterns = [
re.compile(r'[0-9]+,?[0-9]+,?[0-9]+,?[0-9]+')
]它工作的很好,我不知道如何从这些number...many中排除年份谢谢
当然,我是在做有知觉的工作,数字在句子里,不是必须的,一开始是这样的。
-Thus 60是41,因为100,000是65,656.2,这是βυ的合适大小这被发现是36,075,5621 (偏心率为9165),对应于火星的整个椭圆形路径。-It为4657。
编辑:
因为在我的任务中,我遇到了很多问题,我已经更新了这个问题几次。
首先,问题主要解决了!感谢大家的贡献。
这只是一个很小的问题。根据其他评论,我没有像下面这样集成解决方案。
r'(?<!\S)(?<![\d,])(?:(?!(?:1[2-9]\d\d|20[01]\d|2020))\d{4,}[\u00BC-\u00BE\u2150-\u215E]?|\d{1,3}(?:,\d{3})+)(?![\d,])[\u00BC-\u00BE\u2150-\u215E]?(?!x)(?!/)它可以正确地处理大多数情况,
https://regex101.com/r/o5gdDt/8
然后,因为我的文本中有一种噪音,就像这样:
“我将ψο作为图形单位x。它的平方几何也将是图形单位x2。将εο上的平方几何相加,227,052,两者的和将是ψε或ψν的平方几何。但βν的平方几何是4,310,747,475段。”
它无法捕获以",“结尾的数字227,052
当我改变它的时候,我遇到了这个问题
(?<!\S)(?<![\d,])(?:(?!(?:1[2-9]\d\d|20[01]\d|2020))\d{4,}[\u00BC-\u00BE\u2150-\u215E]?|\d{1,3}(?:,\d{3})+)(?![\d])[\u00BC-\u00BE\u2150-\u215E]?(?!x)(?!/)
``` (basically ignoring comma in (,?![\d])) 我遇到了另一个问题,正则表达式捕获了4,310,747,475个这样的问题:
4,310,747,475x2+978,763,835,536,363
正如你在这里看到的..
https://regex101.com/r/o5gdDt/9
任何想法都将不胜感激
然而,正则表达式现在几乎工作得很好,但为了更完美,我需要对其进行改进
-
发布于 2019-10-09 02:16:35
如果排除所有4位数字年份,则其为
\b(?!\d{4}\b)[0-9]+(?:,(?!\d{4}\b)[0-9]+)*\b
https://regex101.com/r/T3L3X5/1
如果仅排除1200到2020年之间的年数,则为
\b(?!(?:12\d{2}|1[3-9]\d{2}|20[01]\d|2020)\b)[0-9]+(?:,(?!(?:12\d{2}|1[3-9]\d{2}|20[01]\d|2020)\b)[0-9]+)*\b
发布于 2019-10-09 01:23:11
您可以使用下面的正则表达式来匹配一到三位数字,也可以选择匹配逗号分隔但不超过3位的任何后续数字。
\b\d{1,3}(?:,\d{1,3})*\bhttps://regex101.com/r/T6sNUs/1/
解释是这样的,
\b -标记单词边界,以避免在大于3的数字中部分匹配digits\d{1,3} -匹配一到三位数字number(?:,\d{1,3})* -非捕获组可选地匹配具有一到三个digits\b的逗号分隔数字-再次标记单词边界,以避免在大于3位的数字中部分匹配编辑:对于注释中提到的要求,其中至少有三位或三位以上的数字应匹配,可选地用逗号分隔。但如果行中出现的任何数字在1200到2020年之间,它应该拒绝匹配。
这个正则表达式应该可以满足您的需求,
^(?!.*\b(?:1[2-9]\d\d|20[01]\d|2020)\b)\d{3,}(?:,\d{3,})*$请确认这是否适用于您,因此我可以添加以上正则表达式的解释。
如果您希望它像您在评论中提到的那样限制在1200到1800之间,您可以使用此正则表达式,
^(?!.*\b(?:1[2-7]\d\d|1800)\b)\d{3,}(?:,\d{3,})*$发布于 2019-10-09 21:19:36
这与您的所有测试用例都匹配:
(?<![\d,])(?:(?!(?:1[2-9]\d\d|20[01]\d|2020))\d{4,}|\d{1,3}(?:,\d{3})*)(?![\d,])说明:
(?<![\d,]) # negative lookbehind, make we haven't digit or comma before
(?: # non capture group
(?! # negative lookahead, make sure we haven't after:
(?: # non capture group
1[2-9]\d\d # range 1200 -> 1999
| # OR
20[01]\d # range 2000 -> 2019
| # OR
2020 # 2020
) # end group
) # end lookahead
\d{4,} # 4 or more digits
| # OR
\d{1,3} # 1 up to 3 digits
(?:,\d{3})* # non capture group, a comma and 3 digits, 0 or more times
) # end group
(?![\d,]) # negative lookahead, make sure we haven't digit or comma afterhttps://stackoverflow.com/questions/58290918
复制相似问题