c# - 使用 Regex.Replace 方法时如何找到子字符串?

标签 c# regex

我正在使用这段代码通过索引替换字符串中所有找到的值:

int i = 0;
input = "FGS1=(B+A*10)+A*10+(C*10.5)";
Regex r = new Regex("([A-Z][A-Z\\d]*)");
bool f = false;
MatchEvaluator me = delegate(Match m)
{
  f = true;
  i++;
  return "i" + i.ToString();
};
do { f = false; input = r.Replace(input, me); } while (f);
//expected result: input == "i1=(i2+i3*10)+i4*10+(i5*10.5)"

但我必须以更复杂的方式来做,因为我必须做一些具有发现值(value)的事情。例如:

MatchEvaluator me = delegate(Match m)
{
  foundValue = /*getting value*/;
  if (foundValue = "A") i--;
  f = true;
  i++;
  return "i" + i.ToString();
};

此代码的预期结果:"i1=(i2+i2*10)+i2*10+(i3*10.5)"

最佳答案

您可以在匹配对象中使用Groups 集合来获取匹配的组。第一项是整个匹配项,因此第一组的值位于索引 1 处:

string foundValue = m.Groups[1].Value;
if (foundValue == "A") i--;

关于c# - 使用 Regex.Replace 方法时如何找到子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27676161/

相关文章:

python - 重叠的正则表达式匹配

java - 将 python 正则表达式转换为 java

java - 计算字符串中单词出现的次数

c# - 自动点击超链接的Javascript

python - python中使用正则表达式判断变量类型

c# - 在哪里停止使用 async/await 关键字?

c# - 根据预先排序的列表对列表进行排序

java - 为什么 Matcher 找不到模式

C# 泛型代码膨胀——我应该担心吗?

c# - 将 Entity Framework 与存档数据库一起使用