私はこのようなものを持っているとしましょう:
。。。。初め 。。2番。。。。。第3 。。。
必要な出力は次のとおりです。
.First.Second.Third.
正規表現を使用してこれを実現するにはどうすればよいですか?私はこのようなことを念頭に置いています:
str = Regex.Replace(str, @"\.+", ".", RegexOptions.Multiline).Trim();
試してみましたが、機能しません。
質問にあるように、ドット間にスペースがある場合は、次を試してください。
str = Regex.Replace(str, @"[\. ]*\. *", ".", RegexOptions.Multiline)
これにより、少なくとも 1 つのドットを含むドットとスペースの文字列が変換されます。
". . .First" => ".First" " . . 最初" => ".最初" " ... 最初" => ".最初" ". .First" => ".First" 「最初」 => 「最初」
バックリファレンスを使用してみましたか?
正規表現エンジンに応じて、次のようになります。(.)(\1)+
1文字(ドットのみが必要な場合は、そう言ってください-しかし、それは明らかな方法であるはずです)、そしてこれの少なくとももう1つのコピー。文字列を\1
-最初のグループの結果-に置き換えると、機能するはずです。それは間違いなくperlで私のためになります:
$ perl -pe 's/(.)(\1)+/\1/g'
aaa bbb ccc def abbc
a b c def abc
繰り返される文字は、最初の出現のみに置き換えられました。
最新の(そしてできれば正しい)リビジョンによると:
Regex.Replace(
". . . . First. . . Second. . . . . . Third. . .",
@"(?: *\. *)+",
".",
RegexOptions.Multiline)
.Trim()
これも試してください:
Regex.Replace(input, "[. ]+(?=[^ .])?",".");
このパターンは、文字 "." を探します。および " " は、これら 2 つ以外の文字が続く場合を除きます。