是否可以在正则表达式中执行加法?
问题描述:
假定$ 2填充的整数占位符,是能够通过1?:是否可以在正则表达式中执行加法?
var strReplace = @"$2";
Regex.Replace(strInput, @"((.)*?)", strReplace);
答
您可以使用Regex.Replace
回调版采用了MatchEvaluator
,看到的例子在:
下面是一个例子(ideone):
using System;
using System.Text.RegularExpressions;
class Program
{
static string AddOne(string s)
{
return Regex.Replace(s, @"\d+", (match) =>
{
long num = 0;
long.TryParse(match.ToString(), out num);
return (num + 1).ToString();
});
}
static void Main()
{
Console.WriteLine(AddOne("hello 123!"));
Console.WriteLine(AddOne("bai bai 11"));
}
}
输出:
hello 124!
bai bai 12
答
在标准(CS理论)的正则表达式增加它,这是不可能用正则表达式。
但是,Perl等对正则表达式有一些扩展,这会影响他们的行为,我对他们不够熟悉,不能肯定地说扩展正则表达式不会这样做,但我相当肯定这个行为是不可能的正则表达式。
+2
Perl:'s/\ d +/$&+ 1/eg' – Qtax 2012-03-08 13:39:56
答
标准正则表达式不可能,但如果您编写自定义MatchEvaluator,则可以。
string str = "Today I have answered 0 questions on StackOverlow.";
string pattern = @"\w*?(\d)";
var result = Regex.Replace(str, pattern,
m => (int.Parse(m.Groups[0].Value)+1).ToString());
Console.WriteLine(result);
今天我已经StackOverlow回答的问题:1。
如果你正在使用JavaScript,然后再尝试以下 http://stackoverflow.com/questions/423107/use-regexp-to-match-a-parenthetical-number-then-increment-it – PraveenVenu 2012-03-08 13:36:32