質問

特定の文字列の前にスペースを追加しようとしています(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)スペースをオプションにすると、ネット変更なしのスペースにスペースを置き換えます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top