我正在处理一个字符串数组,并希望执行以下操作:
//Regex regex; List<string> strList; List<string> strList2;
foreach (string str in strList){
if (regex.IsMatch(str)) { //only need in new array if matches...
strList2.Add(regex.Replace(str, myMatchEvaluator))
//but still have to apply transformation
}
}
现在,我知道这是可行的,但这实际上意味着对数组中的每个字符串运行两次相同的正则表达式。有没有办法将这两个步骤 - 过滤和转换 - 折叠成一个正则表达式解析调用?
(大部分时间都可以工作的一个是
string str2 = regex.Replace(str, myMatchEvaluator);
if (str2 == str)
strList2.Add(str2);
但这通常会丢弃一些仍然不需要替换的有效匹配项。)
编辑:一个与我的大致相似的正则表达式示例,以说明为什么这很棘手:想象一下在日志文件中的行首查找单词,并希望将它们大写。
正则表达式是new Regex("^[a-z]+", RegexOptions.IgnorePatternWhiteSpace)
,替换函数是match => match.ToUpper()
。
现在一些第一个单词已经大写了,我不想把它们扔掉。另一方面,我不想大写该单词的所有实例,而只是第一个。