0

次の文字列が与えられたとします。

stri = "Date 26 March 1256\nDate of death\n27 January 1756\n25 January 1567\n death"

ここで、 の直後Date of death、つまりの日付のみを抽出したいと思います27 January 1756

私はこれまでに得ました:

>>> regex = re.compile(r"Date of death.*?[0-9][0-9]? [A-z]+ [0-9]{4}", re.DOTALL)
>>> print regex.findall(stri)
['Date of death\n27 January 1756']

27 January 1756しかし、1回の正規表現検索でのみ取得したいと思います。

4

4 に答える 4

4

findall返したい一致の部分の周りにキャプチャ グループ (括弧) を使用する必要があります。

>>> regex = re.compile(r"Date of death.*?([0-9][0-9]? [A-z]+ [0-9]{4})", re.DOTALL)
>>> print regex.findall(stri)
['27 January 1756']
于 2012-10-24T13:06:37.400 に答える
2

代わりに後読みを使用します。

regex = re.compile(r"(?<=Date of death\n)[0-9][0-9]? [A-z]+ [0-9]{4}", re.DOTALL)

Date of death\nこれは、実際に一致に含めることなく、現在の位置が によって先行されているかどうかを確認します。

.*?可変長の後読みはほとんどの正規表現エンジンでサポートされていないため、現在は使用できないことに注意してください。

組み込みの文字クラスを使用して、正規表現を少し短くすることもできます\d

regex = re.compile(r"(?<=Date of death\n)\d{1,2} [A-z]+ \d{4}", re.DOTALL)
于 2012-10-24T13:07:11.697 に答える
1

これはどう:

In [64]: m=re.search("(?<=Date of death)\s+(\d+ \w+ \d+)",stri)

In [65]: m.groups()
Out[65]: ('27 January 1756',)

In [66]: m.groups()[0]
Out[66]: '27 January 1756'
于 2012-10-24T13:19:28.810 に答える
1

キャプチャ グループを使用します。

regex = re.compile(r"Date of death (.*?[0-9]{1,2} [A-z]+ [0-9]{4})", re.DOTALL)
于 2012-10-24T13:06:47.280 に答える