使用正则表达式

时间:2017-08-16 12:13:12

标签: c# .net regex string

我有一个关于使用正则表达式在字符串中进行多次替换的查询。

该平台是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保持不变。

我以为我可以在循环中应用匹配/替换操作,直到该行不再更改,但当然这不起作用,因为匹配正则表达式总是在第一次匹配时停止。

任何帮助都非常感谢!

1 个答案:

答案 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");