2011-01-11 6 views
4

文字列の先頭に\bの動作をエミュレートする必要があります。単語の境界。アサーションは失敗し、私は得ることはありません、その場合:私はない限り、私はマッチしている文字列の先頭によ、希望としてこの作品文字列の先頭で動作するlookbehindアサーションを使って正規表現を作成するにはどうすればいいですか?

"(?<=\\W|\\p{InCJKUnifiedIdeographs})foo" 

:今、私のようなものを使用していますヒット。私が望むのは、文字列の先頭にある場合、または単語がない文字や表意文字の前にfooがある場合には、と同じです。しかし、私はそれをサポートするための正しい命題を得ることができません。

どのような考えですか?それともこれは不可能ですか?

ありがとうございます。

+0

文字列の先頭にあれば、どういう意味ですか?それはすべての文字列をキャプチャするでしょう。すべての文字列に '文字列の開始'があります。 – Jaskirat

+0

それはできません:文字列 "foo foobar baz"に対して前述の正規表現を使用すると、 "foo" – TreeRex

+1

ほとんどの場合、 '(?<![\ w \ P {InCJKUnifiedIdeographs}])'の条件を逆にすることで、あなたは望むものを得ることができます。私は答えとしてそれを追加したいが、私はそれをテストする時間がない。 – Kobi

答えて

12
"(?<=^|\\W|\\p{InCJKUnifiedIdeographs})foo" 

lookbehind条件にストリングの開始アンカーを追加するだけです。

+0

ありがとうロバート、それは魅力のように動作します。何とか私が実験した様々な組み合わせの中で、私は一番明らかにしようとはしませんでした。 – TreeRex

+1

私の場合 ''(?<=^|)はエラーにつながります(?= | $) '' https://regex101.com/r/vD5iH9/21 –

+1

@СашкоЛихенкоこれはPythonの正規表現エンジンの限界です – RobertB

関連する問題