-4

私はこのようなものを持っているとしましょう:

。。。。初め 。。2番。。。。。第3 。。。

必要な出力は次のとおりです。

.First.Second.Third.

正規表現を使用してこれを実現するにはどうすればよいですか?私はこのようなことを念頭に置いています:

str = Regex.Replace(str, @"\.+", ".", RegexOptions.Multiline).Trim(); 

試してみましたが、機能しません。

4

5 に答える 5

2

質問にあるように、ドット間にスペースがある場合は、次を試してください。

str = Regex.Replace(str, @"[\. ]*\. *", ".", RegexOptions.Multiline)

これにより、少なくとも 1 つのドットを含むドットとスペースの文字列が変換されます。

". . .First" => ".First"
" . . 最初" => ".最初"
" ... 最初" => ".最初"
". .First" => ".First"
「最初」 => 「最初」
于 2012-11-28T02:10:22.300 に答える
1
Regex.Replace(input, @"(?<=(.))\1+", "");

このデモを参照してください。


更新 (質問の更新に基づく)

Regex.Replace(input, @"((\s)?(\S)(?(2)|\s))\1+\s?", "$3");

このデモを参照してください。

于 2012-11-28T01:40:33.533 に答える
0

バックリファレンスを使用してみましたか?

正規表現エンジンに応じて、次のようになります。(.)(\1)+

1文字(ドットのみが必要な場合は、そう言ってください-しかし、それは明らかな方法であるはずです)、そしてこれの少なくとももう1つのコピー。文字列を\1-最初のグループの結果-に置き換えると、機能するはずです。それは間違いなくperlで私のためになります:

$ perl -pe 's/(.)(\1)+/\1/g'
aaa bbb   ccc def abbc
a b c def abc

繰り返される文字は、最初の出現のみに置き換えられました。

于 2012-11-28T01:28:02.323 に答える
0

最新の(そしてできれば正しい)リビジョンによると:

Regex.Replace(
   ". . . . First. . . Second. . . . . . Third. . .", 
   @"(?: *\. *)+", 
   ".", 
   RegexOptions.Multiline)
.Trim() 
于 2012-11-28T02:00:20.790 に答える
0

これも試してください:

Regex.Replace(input, "[. ]+(?=[^ .])?",".");

このパターンは、文字 "." を探します。および " " は、これら 2 つ以外の文字が続く場合を除きます。

于 2012-11-28T06:16:21.417 に答える