重叠正则表达式替换

时间:2013-06-12 21:46:43

标签: c# regex

我有一种情况,即当逗号不应该被删除时,例如,

  约翰福音3:16,18,4:2成为约翰福音3:16 18 4:2

我想把逗号放回去,并认为我可以用

来做
string strRegex = @"(\d+)\s+(\d+)";
RegexOptions myRegexOptions = RegexOptions.None;
Regex myRegex = new Regex(strRegex, myRegexOptions);
string strTargetString = @"John 3:16 17 4:3";
string strReplace = @"$1,$2";

return myRegex.Replace(strTargetString, strReplace);

但这只是给了我

  约翰福音3:16,18 4:2

我错过了什么?

2 个答案:

答案 0 :(得分:5)

使用lookbehind and lookahead,因此数字不属于您的匹配项目:

string strRegex = @"(?<=\d)\s+(?=\d)";
...
string strReplace = @",";

答案 1 :(得分:1)

您可以尝试使用lookbehind:

@"(?<=\d)\s+(\d+)"

并替换为

,$1