0

次のような一連のレコードがあります。

名前

  • 名前 ポール・ベリー:現在
  • ジョージ・ネッキーの住所:不在
  • 名前 ボブ・ヴァン・バステン:現在
  • 名前 リチャード・フォン・ランピー: 不在
  • 名前パパバッジ: ありません
  • 名前 ポール・ベリー:現在
  • ストリート・ジョージ・ネッキー:不在
  • Street Bob van Basten: 現在
  • 名前 リチャード・フォン・ランピー: 不在
  • City Daddy バッジ: 存在しません

そして、名前で始まるすべてのレコードがフォームにあることを望みます

  • 名前名前 姓: 存在しません

他の単語で始まるレコードをそのまま残します。

つまり、名前が not で始まるレコードに「not」という文字列を追加したいのです。私はpython(pywikipediabot)で作業しています

しようとしている

python replace.py -dotall -regex 'Name ((?!not ).*?)present' 'Name \1not present'

ただし、既に存在する場所でも「not」を追加します。

おそらく、否定先読み構文を理解していないのでしょうか?

4

3 に答える 3

2

探して: present、に置き換えて: not presentください。

編集:改善された答え:

for line in lines:
    m = re.match('^Name[^:]*: present', line)
    if m:
        print re.sub(': present', ': not present', line)
    else:
       print line
于 2012-03-01T08:31:44.177 に答える
0

以下はそれを行います:

re.sub(r'(Name.*?)(not )?present$', r'\1not present', s)
于 2012-03-01T08:33:48.237 に答える
0

「否定後読み」式が必要です。この置換は機能します:

'Name (.*)(?<!not )present' -> 'Name \1not present'

.* は "Name" と "present" の間のすべてに一致しますが、正規表現全体は、"present" の前に "not" がない場合にのみ一致します。

本当に必要-dotallですか?行内のみで.*一致させたいようです。

于 2012-03-01T10:17:39.873 に答える