これは、すべての行に引用符が必要であり、空の行が許可されているため、少し注意が必要です。あなたが正しく投稿したファイルに一致する正規表現は次のとおりです。
'(""\n)*"This(( "\n(""\n)*")|("\n(""\n)*" )| )is(( "\n(""\n)*")|("\n(""\n)*" )| )an(( "\n(""\n)*")|("\n(""\n)*" )| )example(( "\n(""\n)*")|("\n(""\n)*" )| )string"'
ちょっとややこしいですが、一致させたい文字列だけですが、次の文字列で始まります。
(""\n)*"
各単語間のスペースを次のように置き換えています。
(( "\n(""\n)*")|("\n(""\n)*" )| )
これは、各単語の後に「スペース、引用、改行、(空の文字列の無制限の数)引用」、または同じシーケンスであるが最後までのスペースが多い、または単なるスペースの3つの異なる可能性をチェックします。
これを機能させるためのはるかに簡単な方法は、一致させようとしている文字列を受け取り、それに一致する正規表現を返す小さな関数を作成することです。
def getregex(string):
return '(""\n)*"' + string.replace(" ", '(( "\n(""\n)*")|("\n(""\n)*" )| )') + '"'
したがって、「filestring」という文字列で投稿したファイルがある場合、次のような一致が得られます。
import re
def getregex(string):
return '(""\n)*"' + string.replace(" ", '(( "\n(""\n)*")|("\n(""\n)*" )| )') + '"'
matcher = re.compile(getregex("This is an example string"))
for i in matcher.finditer(filestring):
print i.group(0), "\n"
>>> "This is "
"an example string"
"This is an example string"
""
"This is an "
"example"
" string"
この正規表現は、3 番目の msgid の "example" の後にあるスペースを考慮していませんが、これはマシンによって生成されたものであり、それは間違いだと思います。