0

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

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

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

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

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

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

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

4

2 回答 2

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]);
}
于 2013-05-01T20:57:20.550 回答
0

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

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

因此,您的正则表达式可以如您所说的那样 ([aeiou]'),您可以使用字典将旧值映射到 MatchEvaluator 中的新值。

于 2013-05-02T01:10:08.603 回答