1

特定の位置にあるいくつかの数字を削除するために使用される正規表現パターンが必要です。

私の文字列形式は次のようになります: xxxx - 2013-xxxxxx9 xxxxxxxx9、文字列の '9' は数字を意味するか、存在しません。

私が書いたコードは次のようなものです:

  string str= "dddd - 2013-0Winter1 morning2";
  Regex pattrn = new Regex(".* - ([0-9]{4}-).*([1-9]?) .*([1-9]?)$");
  Match match = pattern.Match(me);
  for (int index = match.Groups.Count - 1; index > 0; index--)
  {
    str = str.Remove(match.Groups[index].Index, match.Groups[index].Length);
  }

これを実行すると、match.Groups[2]match.Groups[3]値が空白になります。しかし、文字列内の2013' '、' 1' および ' 'を見つけたいです。2

結果は次のとおりです。

"dddd - 0Winter1 morning2";

私が望む結果は次のとおりです。

"dddd - 0Winter morning";

理由を知っている人はいますか?

4

1 に答える 1

2

問題は、あなた.*が貪欲であるため、([1-9]?)その後に来るものをむさぼり食うということです。貪欲でない量指定子( )を使用すると、必要な.*?結果が得られます。

string str = "dddd - 2013-0Winter1 morning2";
Regex pattern = new Regex("^.* - ([0-9]{4}-).*?([1-9]?) .*?([1-9]?)$");
Match match = pattern.Match(str);
for (int index = match.Groups.Count - 1; index > 0; index--)
{
    str = str.Remove(match.Groups[index].Index, match.Groups[index].Length);
}

Console.WriteLine(str); // dddd - 0Winter morning

もちろん、これは同じ結果を生成します。

string str = "dddd - 2013-0Winter1 morning2";
str = Regex.Replace(str, @"^(\w*? [0-9]{4}-\w*?)[1-9]? (\w*?)[1-9]?$", "$1 $2");
Console.WriteLine(str); // dddd - 0Winter morning
于 2013-07-18T21:26:45.933 に答える