Python,正则表达式排除数字匹配

要使用正则表达式在字符串中提取任何长度大于 2 的数字,但还要排除“2016”,这是我所拥有的:


import re


string = "Employee ID DF856, Year 2016, Department Finance, Team 2, Location 112 "


print re.findall(r'\d{3,}', string)

输出:


['856', '2016', '112']

我试图将其更改为以下以排除“2016”,但都失败了。


print re.findall(r'\d{3,}/^(!2016)/', string)

print re.findall(r"\d{3,}/?!2016/", string)

print re.findall(r"\d{3,}!'2016'", string)

正确的做法是什么?谢谢你。


九州编程
浏览 293回答 3
3回答

慕桂英3389331

您可以使用import res = "Employee ID DF856, Year 2016, Department Finance, Team 2, Location 112 20161 12016 120162"print(re.findall(r'(?<!\d)(?!2016(?!\d))\d{3,}', s))请参阅Python 演示和正则表达式演示。细节(?<!\d)&nbsp;- 当前位置左侧不允许有任何数字(?!2016(?!\d))-2016在当前位置的右侧不允许紧跟另一个数字\d{3,}&nbsp;- 3 位或更多位数字。带有一些代码的替代解决方案:import res = "Employee ID DF856, Year 2016, Department Finance, Team 2, Location 112 20161 12016 120162"print([x for x in re.findall(r'\d{3,}', s) if x != "2016"])在这里,我们提取任何 3 个或更多数字 ( re.findall(r'\d{3,}', s)) 的块,然后过滤掉那些等于2016。

泛舟湖上清波郎朗

您想使用负前瞻。正确的语法是:\D(?!2016)(\d{3,})\b结果是:In&nbsp;[24]:&nbsp;re.findall(r'\D(?!2016)(\d{3,})\b',&nbsp;string) Out[24]:&nbsp;['856',&nbsp;'112']或者使用负面回顾:In&nbsp;[26]:&nbsp;re.findall(r'\D(\d{3,})(?<!2016)\b',&nbsp;string) Out[26]:&nbsp;['856',&nbsp;'112']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python