C# 使用正则表达式查找字符串中特定位置的数字

C# 使用正则表达式查找字符串中特定位置的数字,c#,.net,regex,string,C#,.net,Regex,String,我需要一个正则表达式模式,它将用于删除特定位置的一些数字 我的字符串格式如下:xxxx-2013-xxxxxx 9 xxxxxx 9,字符串中的“9”表示数字或不存在 我写的代码是这样的: string str= "dddd - 2013-0Winter1 morning2"; Regex pattrn = new Regex(".* - ([0-9]{4}-).*([1-9]?) .*([1-9]?)$"); Match match = pattern.Match(me); f

我需要一个正则表达式模式,它将用于删除特定位置的一些数字

我的字符串格式如下:
xxxx-2013-xxxxxx 9 xxxxxx 9
,字符串中的“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";

有人知道为什么吗

问题是你的
*
太贪婪了,所以它正在吞食它后面的
([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

你是说这些是固定位置的?如果是这样,为什么不使用
子字符串
?如果第一个“9”存在,则必须在后面加一个空格,如果第二个“9”存在,则必须在字符串的末尾。这确实不清楚。你能给出几个有效字符串的例子和每个字符串的预期输出吗?同意@Oded-指定的格式非常不清楚。