有没有办法从正则表达式中脱颖而出?假设我有一个匹配
\s*(string)\s*(.*\()\s*(\d*)\)\s*;?(.*)
我希望像这样改变它
Regex.Replace(line, @"\s*(string)\s*(.*\()\s*(\d*)\)\s*;?(.*)", "$1 $2($3) // $4", RegexOptions.IgnoreCase);
我有什么方法可以单独抓取$4
并将其设置为等于某个string
变量?
假设正则表达式匹配为:string (55) ;comment
在这种情况下,我只想获得单词comment
并将其设置为字符串而不通过String.Split函数。但最终,我只想得到括号之间的数字。
答案 0 :(得分:2)
Replace
方法有overload个MatchEvaluator
代表:
string pattern = "...";
string result = Regex.Replace(line, pattern, m =>
{
int digits = 0;
string comment = m.Groups[4].Value; // $4
int.TryParse(m.Groups[3].Value, out digits); // $3
return string.Format("{0} {1}({2}) // {3}",
m.Groups[1].Value, m.Groups[2].Value, digits, comment);
}, RegexOptions.IgnoreCase);
希望这有帮助。
答案 1 :(得分:0)
是的,如果我正确理解了这个问题:
var re = new Regex(@"\s*(string)\s*(.*\()\s*(\d*)\)\s*;?(.*)");
var match = re.Match(input);
if (match.Success)
{
int i = match.Groups[4].Index;
int n = match.Groups[4].Length;
input = input.Substring(0, i) + replacementString + input.Substring(i + n);
}