2017-05-13 51 views
1

我在Python中工作,需要能夠讀取一串文本並識別文本中提到的所有年份。正則表達式來識別年份的不同形式

在今後幾年將是1800和2099之間,並可以採取幾種不同的形式:

  • 1955
  • '55
  • 55

我的正則表達式是壞的,我需要小心避免匹配19,然後55,195 -> [19]520178

回答

2

這將做到這一點:\d{4}|'\d{2}|\d{2}

Live demo

編輯1:
如果正則表達式被用作驗證(而不是提取,又名你可以假設字符串的唯一內容將數),你可以使用這個^(\d{4}|'\d{2}|\d{2})$

Live demo

編輯2:
如果使用正則表達式作爲提取,則可以使用此(?<!\d)(\d{4}|'\d{2}|\d{2})(?!\d)但由於它同時使用前視圖和後視圖,因此分配比前面提到的要慢。

Live demo

import re 

m = re.findall(r"(?<!\d)(\d{4}|'\d{2}|\d{2})(?!\d)", "1955 '55 55 195 20567") 

print(m) # ['1955', "'55", '55'] 
+0

謝謝!然而,如果我添加195或20567,這也會標記這些以及 – Chris

+0

@Chris如果正則表達式用作驗證(而不是提取,也可以假設字符串的唯一內容將是數字),您可以使用此'^(\ d {4} |'\ d {2} | \ d {2})$' – Olian04

+0

我希望是這種情況。在我的情況下,我得到了需要提取年份的原始文本字符串,但這仍然有用。 – Chris

1

這可能會幫助:

\b(18|19|20|')?\d\d\b

字邊界\b防止匹配子或更長的數量之內,否則我們只是尋找合適的世紀或單引號(可選),後面跟兩個數字。

https://regex101.com/r/iggqmK/5/

+0

這是否依賴工作? [regex101](https://regex101.com/r/dOgGur/7) – Olian04