2

わかりました正規表現マスター、私は非常に長いテキストを持っており、「彼が言った」という言葉や同様のバリエーションを含む文に引用符を追加しようとしています.

例えば:

s = 'This should have no quotes. This one should he said. But this one should not. Neither should this. But this one should she said.'

結果は次のようになります。

This should have no quotes. "This one should," he said. But this one should not. Neither should this. "But this one should," she said.

これまでのところ、かなり近づくことができますが、完全には正しくありません。

>>> import re
>>> m = re.sub(r'\.\W(.*?) (he|she|it) said.', r'. "\1," \2 said.', s)

結果:

>>> print m
This should have no quotes. "This one should," he said. But this one should not. "Neither should this. But this one should," she said.

ご覧のとおり、最初のインスタンスの前後に引用符が適切に配置されていますが、2 番目のインスタンスには早すぎます。どんな助けでも大歓迎です!

4

1 に答える 1

2

コメントで指摘されているいくつかの異なる有効な状況がありますが、あなたが直面していた懸念に対処するために:

の末尾にピリオドがあるので全文引用ですone should not.。あなたが本当に望むのは、最後の期間にのみ引用することです。したがって、次のように、対応する括弧内にピリオドを含めないようにしてください。

m = re.sub(r'\.\W([^\.]*?) (he|she|it) said.', r'. "\1," \2 said.', s)

これは、文にピリオドがある場合は失敗します"Dr. Seuss likes to eat, she said"が、それは別の問題です。

于 2013-11-07T00:51:05.977 に答える