0

タイプしにくい記号を書くための省略記法があるとしましょう。a'たとえば、 と書くと、 が表されáます。これらを変換する正規表現のシーケンス全体を作成できます。たとえば、次のようになります。

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

しかし、私が望むのは、さまざまなケースを処理する単一の正規表現です。

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

つまり、正規表現パーサーが set の n 番目のメンバーを使用して一致を検出すると、setaeiouの 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

私の知る限り、正規表現は確かにこれらすべての構造を識別できますが、必要な置換などの変換は実行できません。ただし、.NET には、以下のように、MatchEvaluator を使用してプログラムによる置換を可能にする拡張機能があります。

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

したがって、正規表現は ([aeiou]') のようになり、辞書を使用して古い値を MatchEvaluator の新しい値にマップできます。

于 2013-05-02T01:10:08.603 に答える