アンカー否定と弦のマッチングのための正規表現
-
27-10-2019 - |
質問
特定の文字列の前にスペースを追加しようとしています(Token
たとえば)は、正規表現を別の人に置き換えることによって: somethingToken
になるはずです something Token
しかし something Token
とどまるべきですsomething Token_
そしてそうではありませんsomething Token
(2つのスペース付き)
私は、非空間文字とトークンに一致する正規表現を見つけるのに苦労していますが、試合に非空間文字を含めることはありません(そうでなければ、それも交換されます)。 (失敗した)試みは、 \b
アンカー(単語の始まりと一致するはずです)が、アンカーを否定できるかどうかはわかりません。これについての助けがいただいています。ありがとう。
解決
私はちょうどこれに対する答えを見つけました、おそらくそれは他の誰かに役立つでしょう:
\BToken
これは否定された単語の境界を表しているため、標準の単語境界( b)が一致しない場合は、本質的に一致します。私の例では、それは確かに一致します 何かがtoken だがしかし 何かトークン そのまま残っています。
他のヒント
Javaでは、これは次のように達成できます。
final String text = "fooToken foo Token";
// Prints 'foo Token foo Token'
System.out.println(text.replaceAll("(?<=\\S)(?=Token)", " "));
ここでの概念は、見た目と見た目です。見る Regexチュートリアル - lookheadとlookbehind zero -widthアサーション 詳細については。
(?<!\u0020)(?=Token)
これは、非空間を背後に見ます。その後、トークンを目にしますが、幅はありません。これにより、この試合をスペースに置き換えることができます。
編集:JavaScriptで動作する必要がある場合は、\u0020?(?=Token)
スペースをオプションにすると、ネット変更なしのスペースにスペースを置き換えます。