将列表中的项替换为另一个列表中的相应成员
本文关键字:列表 成员 另一个 替换 | 更新日期: 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中的新值