5

日付または通常は正規表現の最初の出現をテキストの先頭に移動したい:

例: "I went out on 1 sep 2012 and it was better than 15 jan 2012" 取得したい "1 sep 2012, I went out on and it was better than 15 jan 2012"

に置き換え"1 sep 2012"",1 sep 2012,"から文字列を切り取ることを考えていまし","たが、代わりに何を書くべきかわかりませんreplace_with:

line = re.sub(r'\d+\s(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\s\d{4}', 'replace_with', line, 1)

助けはありますか?

4

1 に答える 1

8

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

>>> import re
>>> s = "I went out on 1 sep 2012 and it was better than 15 jan 2012"
>>> r = re.compile('(^.*)(1 sep 2012 )(.*$)')
>>> r.sub(r'\2\1\3',s)
'1 sep 2012 I went out on and it was better than 15 jan 2012'

ブラケットは文字列の一部をキャプチャします:

(^.*)          # Capture everything from the start of the string
(1 sep 2012 )  # Upto the part we are interested in (captured)
(.*$)          # Capture everything else

`\2\1\3' 次に、置換メモでキャプチャ グループを並べ替えるだけです。キャプチャ グループを参照するには、生の文字列が必要r'\2\1\3'です。私の例の 2 番目のグループは単なるリテラル文字列(1 sep 2012 )ですが、もちろんこれは作成したものなどの任意の正規表現にすることができます (\s最後に余分なものがあります):

(\d+\s(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\s\d{4}\s)

>>> r = re.compile(r'(^.*)(\d+\s(?:aug|sep|oct|nov)\s\d{4}\s)(.*$)')
>>> r.sub(r'\2\1\3',s)
'1 sep 2012 I went out on and it was better than 15 jan 2012'

docs.python.orgから:

'r' または 'R' プレフィックスが存在する場合、バックスラッシュに続く文字は変更されずに文字列に含まれます。

于 2013-01-04T08:08:04.817 に答える