使用另一个列表中的相应成员替换列表中的项目

时间:2013-05-01 20:47:11

标签: c# regex

假设我有一个用于编写难以输入的符号的简写符号。例如,写a'代表á。我可以制作一整套正则表达式来转换它们,例如:

 a' --> á
 e' --> é
 i' --> í
 o' --> ó
 u' --> ú

但我更喜欢的是一个处理一系列案例的正则表达式:

 [aeiou]' --> [áéíóú]

换句话说,当正则表达式解析器使用集合aeiou的第n个成员找到匹配项时,它会使用集合áéíóú的第n个成员进行替换。

有没有办法使用C#提供的正则表达式来做到这一点?

编辑:为了说清楚,我正在寻找一种在正则表达式中执行此操作的方法。我正在使用的程序已经允许用户在运行程序时访问正则表达式,所以如果这可以通过单个正则表达式完成,那么它将为很多人节省大量时间。这些用户可以访问C#源代码。

2 个答案:

答案 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中的新值。