将列表中的项替换为另一个列表中的相应成员

本文关键字:列表 成员 另一个 替换 | 更新日期: 2023-09-27 18:11:48

假设我有一种速记符号,用于书写难以输入的符号。例如,写a'就表示á。我可以创建一个完整的正则表达式序列来转换它们,例如:

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

,但我宁愿有一个单一的正则表达式,处理一系列的情况:

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

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

是否有一种方法可以使用c#提供的正则表达式来做到这一点?

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

将列表中的项替换为另一个列表中的相应成员

这是一个简单的方法:

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]);
}

AFAIK正则表达式当然可以识别所有这些结构,但不能执行诸如您想要的替换之类的转换。然而,.NET确实有一个扩展,允许使用MatchEvaluator进行编程替换,如下所示:

http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.matchevaluator.aspx

所以你的正则表达式可以像你说的([aeiou]'),你可以使用字典将旧值映射到MatchEvaluator中的新值