次のようなパターンを一致させたい:'''abc'''
。しかし、ドキュメントのようにいくつかのノイズが''''''abc'''
あります。正確に3つが前に付いている単語が欲しいだけです" ' "
。やってみ" [^']'''[^'] "
ました。しかし、それは機能しません。正規表現" '{3} "
は3つ以上に一致します" ' "
。
だから誰かが私を助けることができますか?
次のようなパターンを一致させたい:'''abc'''
。しかし、ドキュメントのようにいくつかのノイズが''''''abc'''
あります。正確に3つが前に付いている単語が欲しいだけです" ' "
。やってみ" [^']'''[^'] "
ました。しかし、それは機能しません。正規表現" '{3} "
は3つ以上に一致します" ' "
。
だから誰かが私を助けることができますか?
(?<!')'{3}(?!')
サポートされている場合は、負の先読み(および後読み)を使用します。
'''
編集:あなたがから一致したいと仮定します'''abc'''
、それはあなたの質問が意味するものだからです。異なる場合は指定してください。
あなたは基本的にすでに自分で解決策を与えました。正確に3で囲まれている文字列を照合する場合は'
、次のようにします(例ではPythonを使用します)。
In [33]: re.findall("'{3}\w+'{3}", "'''abc'''")
Out[33]: ["'''abc'''"]
3を超える文字列が前に付くのを避けたい場合は'
、否定的な後読みアサーションを使用するのが最善です(?<!...)
。
In [59]: re.findall("(?<!')'{3}\w+'{3}", "'''abc'''")
Out[59]: ["'''abc'''"]
In [60]: re.findall("(?<!')'{3}\w+'{3}", "''''''''''abc'''")
Out[60]: []
In [62]: re.findall("(?<!')'{3}\w+'{3}", "'''abc''''''''''")
Out[62]: ["'''abc'''"]
3を超えて成功する文字列も避けたい場合は'
、負の先読みアサーションを追加します(?!...)
。
In [63]: re.findall("(?<!')'{3}\w+'{3}(?!')", "'''abc'''")
Out[63]: ["'''abc'''"]
In [64]: re.findall("(?<!')'{3}\w+'{3}(?!')", "''''''''''abc'''")
Out[64]: []
In [65]: re.findall("(?<!')'{3}\w+'{3}(?!')", "'''abc''''''''''")
Out[65]: []
注:先読みと後読みがサポートされているかどうかは、プログラミング言語によって異なります。もしそうなら、これはあなたが望むことを達成するための最良の方法です。
のようなものを試してください^[^']*'{3}[^']+'{3}[^']*$
。中央のに注意してください[^']+
。これは、両側の3つの'''の間に何かがあることも伝える必要があるためです。