これは、すべての行に引用符を必要とし、空行の余裕をもって少しトリッキーです。
'(""\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)*")|)
、いずれかの「スペース、引用符、改行、(空の文字列の数に制限)引用」、または同じSE:各単語の間にスペース終わりまでのスペース、または単にスペース。もしあれば、そう
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"
は、この正規表現は、第三MSGIDで「例」の後に口座にあなたが持っているスペースを取りませんが、私はこれがマシンによって生成されたと仮定し、それは間違いです。
はい分割は単語境界または文字境界にあるかどうかを指定していませんでした。しかし、同様のコンセプトが両方に適用されます。 –
このアプローチは非常に巧妙ですが、文字列にメタ文字が含まれていると、パターンが壊れてしまいます。私はそれがどのように処理されるのか分かりません。 –
それで、私はあなたが一連の普通の単語を検索するつもりかどうか尋ねました。より複雑な構造体を検索する場合は、正規表現を別の形にする必要がありますが、質問への答えは "use \ s"です。任意の入力を検索パターンとして扱うには、まったく異なる質問です。単にメタキャラクタを許可したり、エスケープしたり、ユーザにそれらを使用しないよう警告することができます。 – pwuertz