C#替换表达式匹配的起始端

时间:2012-11-09 09:18:25

标签: c# regex replace

任何人都可以帮我在C#字符串中替换以&#34开头的任何字符串; startingChars"结束于" endingChars" ......类似的东西:

Regex.Replace(strToReplaceIn, "startingChars[anyNumberOfChars]endingChars", myFunction(anyNumberofChars));

其中strStartingChars和strEndingChars是两个字符串并定义了myFunction

例如,如果开头为"Hello, I need to replace startingCharsWITH_SOMETHINGendingChars, ....",则结果为:"Hello, I need to replace myFunctionResult("WITH_SOMETHING"), ..."

请让我知道Regex.Replace表达式会有所帮助,问题不是找到匹配的表达式,而是替换......我怎么能参考

anyNumberOfChars  

在表达式的替换参数中?

我希望它足够清楚......谢谢

3 个答案:

答案 0 :(得分:2)

你应该使用这样的正则表达式:

abc.*xyz

它会匹配这样的字符串:

abcblablablaxyz

考虑使用最小匹配:

abc.*?xyz

这只会匹配第一个xyz,而不是搜索最后一个xyz。

答案 1 :(得分:2)

您可以使用命名组轻松获取要替换的内容,并使用匹配评估程序来构造替换字符串:

using System.Text.RegularExpressions;

static class Program {
    static void Main(string[] args) {
        string strToReplaceIn = "Hello, I need to replace startingCharsWITH_SOMETHINGendingChars, ....";
        string replaced = Regex.Replace(strToReplaceIn, "startingChars(?<contents>.*?)endingChars", (match) => {
            return "myFunctionResult(" + match.Groups["contents"].Value + ")";
        });
    }
}

named group(表达式中的(?<contents>.*?)位)可让您引用表达式的子部分,我认为这就是您要求的内容。
或者,您可以使用一个简单的组,即只是括号之间的表达式,而不是?<name>部分:(.*)。然后,您应该使用整数索引引用它:

match.Groups[1].Value

(注意:组[0]表示整个匹配)

答案 2 :(得分:0)

^ yourString&安培;

^ - 表示字符串的开头
&安培; - 你的字符串结尾