5

「1.2.3.4.5.6.7.8.9.10.11」のような文字列を 4 つの文のグループに一致させる必要があります。4 ピリオドごとに文字列をグループに分割するには、正規表現が必要です。何かのようなもの:

  string regex = @"(.*.\s){4}";

  System.Text.RegularExpressions.Regex exp = new System.Text.RegularExpressions.Regex(regex);

  string result = exp.Replace(toTest, ".\n");

ピリオド自体だけでなく、ピリオドの前のテキストを置き換えるため、機能しません。ピリオドだけを数えて、ピリオドと改行文字に置き換えるにはどうすればよいですか?

4

6 に答える 6

2

.正規表現では「任意の文字」を意味します

したがって、正規表現では.*.、単語に一致する which を使用しました(これは と同等です.+

おそらく探していたのは、" " の後に " " が続いて[^.]\*[.]いない一連の文字です。..

于 2008-10-28T21:36:56.027 に答える
1

メソッドを定義してみる

private string AppendNewLineToMatch(Match match) {
    return match.Value + Environment.NewLine;
}

と使用

string result = exp.Replace(toTest, AppendNewLineToMatch);

これにより、一致ごとにメソッドが呼び出され、そのメソッドの結果に置き換えられます。メソッドの結果は、一致するテキストと改行になります。


編集:また、私はオリバーに同意します。正しい正規表現の定義は次のとおりです。

  string regex = @"([^.]*[.]\s*){4}";

別の編集:正規表現を修正しました。うまくいけば、今回は正しくなりました。

于 2008-10-28T21:33:58.340 に答える
0

検索式:@"(?:([^\.]+?).\s)(?:([^\.]+?).\s)(?:([^\.]+?).\s)(?:([^\.]+?).\s)" 置換式:"$1 $2 $3 $4.\n"

.NET 正規表現を選択して RegexBuddy でこの式を実行したところ、出力は次のようになりました。

one two three four.
five six seven eight.
nine. ten. eleven

ある種の配置で試してみました@"(?:([^.]+?).\s){4}"が、キャプチャは最後の出現(つまり単語)のみをキャプチャするため、置換に関しては、4つのうち3つの単語を失うことになります。間違っている場合は誰かが私を修正してください。

于 2008-10-28T21:38:57.473 に答える
0

正規表現を介してこれを行うことを余儀なくされていますか? 文字列を分割してから配列を処理する方が簡単ではないでしょうか?

于 2008-10-28T21:39:43.587 に答える
0

コンフィギュレーターの答えがエディターによって台無しにされたのか、それとも何なのかはわかりませんが、うまくいきません。正しいパターンは

string regex = @"([^.]*[.]){4}\s*";
于 2008-10-29T02:27:05.067 に答える
-1

この場合、正規表現は少しやり過ぎのように見えます。String.split を使用してから、結果の文字列の配列を分割することをお勧めします。あなたがやろうとしていることを正規表現にしようとするよりも、はるかに簡単で信頼性が高いはずです。

このようなものは、読みやすくデバッグしやすいかもしれません。

String s = "one. two. three. four. five. six. seven. eight. nine. ten. eleven"
String[] splitString = s.split(".")
List li = new ArrayList(splitString.length/2)
for(int i=0;i<splitString.length;i+=4) {
    st = splitString[i]+"."
    st += splitString[i+1]+"."
    st += splitString[i+2]+"."
    st += splitString[i+3]+"."
    li.add(st)
}
于 2008-10-28T21:43:45.950 に答える