要使用正則表達式在字符串中提取任何長度大于 2 的數(shù)字,但還要排除“2016”,這是我所擁有的:import restring = "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)正確的做法是什么?謝謝你。
3 回答

慕桂英3389331
TA貢獻2036條經(jīng)驗 獲得超8個贊
您可以使用
import re
s = "Employee ID DF856, Year 2016, Department Finance, Team 2, Location 112 20161 12016 120162"
print(re.findall(r'(?<!\d)(?!2016(?!\d))\d{3,}', s))
細節(jié)
(?<!\d)
- 當前位置左側不允許有任何數(shù)字(?!2016(?!\d))
-2016
在當前位置的右側不允許緊跟另一個數(shù)字\d{3,}
- 3 位或更多位數(shù)字。
帶有一些代碼的替代解決方案:
import re
s = "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 個或更多數(shù)字 ( re.findall(r'\d{3,}', s)) 的塊,然后過濾掉那些等于2016。

泛舟湖上清波郎朗
TA貢獻1818條經(jīng)驗 獲得超3個贊
您想使用負前瞻。正確的語法是:
\D(?!2016)(\d{3,})\b
結果是:
In [24]: re.findall(r'\D(?!2016)(\d{3,})\b', string) Out[24]: ['856', '112']
或者使用負面回顧:
In [26]: re.findall(r'\D(\d{3,})(?<!2016)\b', string) Out[26]: ['856', '112']
添加回答
舉報
0/150
提交
取消