假设我有一个用于编写难以输入的符号的简写符号。例如,写a'
代表á
。我可以制作一整套正则表达式来转换它们,例如:
a' --> á
e' --> é
i' --> í
o' --> ó
u' --> ú
但我更喜欢的是一个处理一系列案例的正则表达式:
[aeiou]' --> [áéíóú]
换句话说,当正则表达式解析器使用集合aeiou
的第n个成员找到匹配项时,它会使用集合áéíóú
的第n个成员进行替换。
有没有办法使用C#提供的正则表达式来做到这一点?
编辑:为了说清楚,我正在寻找一种在正则表达式中执行此操作的方法。我正在使用的程序已经允许用户在运行程序时访问正则表达式,所以如果这可以通过单个正则表达式完成,那么它将为很多人节省大量时间。这些用户不可以访问C#源代码。
答案 0 :(得分:2)
这是一种天真的方法:
string[] old = new string[]{ "a'", "e'", "i'", "o'", "u'" };
string[] new = new string[]{ "á","é","í","ó","ú" };
for (int i=0; i++; i<5)
{
input = Regex.Replace(input, old[index], new[index]);
}
答案 1 :(得分:0)
AFAIK正则表达式当然可以识别所有这些结构,但不能执行转换,例如您想要的替换。但是,.NET确实有一个扩展,允许使用MatchEvaluator进行编程替换,如下所示:
http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.matchevaluator.aspx
所以你的正则表达式可以像你说的那样([aeiou]')并且你可以使用字典将旧值映射到MatchEvaluator中的新值。