1

以下に示すバージョン番号があります。

020. 000. 1234. 43567 (please note the whitespace after the dot(.))
020,000,1234,43567
20.0.1234.43567
20,0,1234,43567

最後の 2 つのドット (.) の後の数値を、たとえば 1298 と 45678 (任意の数値) に更新するための正規表現が必要です。

020. 000. 1298. 43568 (please note the whitespace after the dot(.))
020,000,1298,45678
20.0.1298.45678
20,0,1298,45678

ありがとう、

4

2 に答える 2

3
resultString = Regex.Replace(subjectString, 
    @"(\d+)    # any number
    ([.,]\s*)  # dot or comma, optional whitespace
    (\d+)      # etc.
    ([.,]\s*)
    \d+
    ([.,]\s*)
    \d+", 
    "$1$2$3${4}1298${5}43568", RegexOptions.IgnorePatternWhitespace);

そうしないと、以下はグループ番号 ( ) に属していると解釈されるため、 の${4}代わりに注意してください。$41$41

(\d+)との違いにも注意してください(\d)+。両方が一致している間、最初のものは括弧で作成されたグループ1234にキャプチャされます。前のキャプチャが次のキャプチャによって上書きされるため、12342 番目のキャプチャのみがキャプチャされます。4

于 2013-01-25T10:00:53.797 に答える
0

バージョンを 1298 および 43568 に置き換えるには

var regex = new Regex(@"(?<=^(?:\d+[.,]\s*){2})\d+(?<seperator>[.,]\s*)\d+$");
regex.Replace(source, "1298${seperator}43568");

それの訳は

  • (?<=)一致にグループは含まれませんが、一致の前に存在する必要があります
  • ^少なくとも 1 つの数字が続く文字列の先頭に一致
  • (?:\d+[.,]\s*)非キャプチャ グループ、少なくとも 1 つの数字の後に a.または,0 個以上のスペースが続くものと一致します
  • {2}前の一致は 2 回発生する必要があります
  • \d+キャプチャの最初の部分、1 桁以上
  • (?<seperator>[.,]\s*).またはの区切り文字を取得し、,その後にオプションのスペースを追加して、名前付きキャプチャ グループに追加します。seperator
  • \d+1 つ以上の数字をキャプチャする
  • $文字列の末尾に一致

置換文字列では、置換バージョンを提供し${seperator}、元のセパレータを挿入するために使用しています。

セパレーターを保持することに煩わされない場合は、単に行うことができます

var regex = new Regex(@"(?<=^(?:\d+[.,]\s*){2})\d+[.,]\s*\d+$");
regex.Replace(source, "1298.43568");
于 2013-01-25T10:26:35.317 に答える