我在Python中工作,需要能夠讀取一串文本並識別文本中提到的所有年份。正則表達式來識別年份的不同形式
在今後幾年將是1800和2099之間,並可以採取幾種不同的形式:
1955
'55
55
我的正則表達式是壞的,我需要小心避免匹配19
,然後55
,195 -> [19]5
或20178
。
我在Python中工作,需要能夠讀取一串文本並識別文本中提到的所有年份。正則表達式來識別年份的不同形式
在今後幾年將是1800和2099之間,並可以採取幾種不同的形式:
1955
'55
55
我的正則表達式是壞的,我需要小心避免匹配19
,然後55
,195 -> [19]5
或20178
。
這將做到這一點:\d{4}|'\d{2}|\d{2}
編輯1:
如果正則表達式被用作驗證(而不是提取,又名你可以假設字符串的唯一內容將數),你可以使用這個^(\d{4}|'\d{2}|\d{2})$
編輯2:
如果使用正則表達式作爲提取,則可以使用此(?<!\d)(\d{4}|'\d{2}|\d{2})(?!\d)
但由於它同時使用前視圖和後視圖,因此分配比前面提到的要慢。
import re
m = re.findall(r"(?<!\d)(\d{4}|'\d{2}|\d{2})(?!\d)", "1955 '55 55 195 20567")
print(m) # ['1955', "'55", '55']
這可能會幫助:
\b(18|19|20|')?\d\d\b
字邊界\b
防止匹配子或更長的數量之內,否則我們只是尋找合適的世紀或單引號(可選),後面跟兩個數字。
這是否依賴工作? [regex101](https://regex101.com/r/dOgGur/7) – Olian04
謝謝!然而,如果我添加195或20567,這也會標記這些以及 – Chris
@Chris如果正則表達式用作驗證(而不是提取,也可以假設字符串的唯一內容將是數字),您可以使用此'^(\ d {4} |'\ d {2} | \ d {2})$' – Olian04
我希望是這種情況。在我的情況下,我得到了需要提取年份的原始文本字符串,但這仍然有用。 – Chris