我有一个关于使用正则表达式在字符串中进行多次替换的查询。
该平台是C#,因此.NET的System.Text.RegularExpression实现。
让我们说我有一个字符串 - 在这种情况下是一个XML片段,但它可以是任何文本,所以没有语法假设:
<key val1="C:\SomeDir\SomePath\FOLDER1" val2="C:\SomeDir\SomePath\FOLDER2" />
我想替换这两条路径的最后一部分 - 让我们说,将其更改为FOLDER3
。
我目前有表达式(C:\\SomeDir\\SomePath)(\\\w*\\)
,它给了我两个组 - 路径的第一部分和我要替换的位。
我可以使用替换字符串${1}\FOLDER3\
,它可以正确替换我想要更改的路径部分。
但是:这仅适用于字符串中的第一个匹配项。因此,FOLDER1
将替换为FOLDER3
,但FOLDER2
保持不变。
我以为我可以在循环中应用匹配/替换操作,直到该行不再更改,但当然这不起作用,因为匹配正则表达式总是在第一次匹配时停止。
任何帮助都非常感谢!
答案 0 :(得分:-1)
使用正则表达式的替换方法。 replace方法确实替换了所有匹配项:
string s = "<key val1=\"C:\\SomeDir\\SomePath\\FOLDER1\" val2=\"C:\\SomeDir\\SomePath\\FOLDER2\" />";
Regex regex = new Regex(@"(C:\\SomeDir\\SomePath)(\\\w*)");
string result = regex.Replace(s, x => x.Groups[1] + @"\FOLDER3");