0

次のようなパターンを一致させたい:'''abc'''。しかし、ドキュメントのようにいくつかのノイズが''''''abc'''あります。正確に3つが前に付いている単語が欲しいだけです" ' "。やってみ" [^']'''[^'] "ました。しかし、それは機能しません。正規表現" '{3} "は3つ以上に一致します" ' "

だから誰かが私を助けることができますか?

4

3 に答える 3

3
(?<!')'{3}(?!')

サポートされている場合は、負の先読み(および後読み)を使用します。

'''編集:あなたがから一致したいと仮定します'''abc'''、それはあなたの質問が意味するものだからです。異なる場合は指定してください。

于 2012-12-25T20:05:13.787 に答える
2

あなたは基本的にすでに自分で解決策を与えました。正確に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]: []

注:先読みと後読みがサポートされているかどうかは、プログラミング言語によって異なります。もしそうなら、これはあなたが望むことを達成するための最良の方法です。

于 2012-12-25T20:10:37.270 に答える
0

のようなものを試してください^[^']*'{3}[^']+'{3}[^']*$。中央のに注意してください[^']+。これは、両側の3つの'''の間に何かがあることも伝える必要があるためです。

于 2012-12-25T20:09:34.990 に答える