0

任何人都可以帮我在 C# 中的字符串中替换任何以“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  

在表达式的替换参数中?

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

4

3 回答 3

2

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

abc.*xyz

它会匹配这样的字符串:

abcblablablaxyz

考虑使用最小匹配:

abc.*?xyz

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

于 2012-11-09T09:25:30.773 回答
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 + ")";
        });
    }
}

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

match.Groups[1].Value

(注:Groups[0] 代表整场比赛)

于 2012-11-09T09:38:54.573 回答
0

^你的字符串&

^ - 表示字符串的开头
& - 字符串的结尾

于 2012-11-09T09:29:03.943 回答