私は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
単語の境界が、そうでなければ私たちは(右の世紀または単一引用符を探しますオプション)、2つの数字が続きます。
これは問題ありませんか? [regex101](https://regex101.com/r/dOgGur/7) – Olian04
ありがとう!しかし、195または20567を追加すると、正規表現が(抽出ではなく、文字列の唯一の内容であると仮定することができます)、これを使用することができる場合は、 – Chris
@Chrisもフラグを立てます。 '^(\ d {4} | '\ d {2} | \ d {2})$' – Olian04
私はそうだったと思う。私のケースでは、年を抽出する必要がある生テキストの文字列を取得していますが、それはまだ有用です。 – Chris