使用Regex查找字符串中特定位置的数字

本文关键字:定位 位置 数字 Regex 查找 字符串 使用 | 更新日期: 2023-09-27 18:23:54

我需要一个Regex模式,它将用于删除特定位置的一些数字。

我的字符串格式如下: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"answers"2"。

结果是:

"dddd - 0Winter1 morning2";

我想要的结果是:

"dddd - 0Winter morning";

有人知道为什么吗?

使用Regex查找字符串中特定位置的数字

问题是你的.*是贪婪的,所以它会吞噬后面的([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