使用正则表达式C#替换Unicode(泰米尔语)字符串

时间:2013-09-11 10:19:54

标签: c# .net regex unicode tamil

我正在使用泰米尔语进行词法分析。 我需要通过以下条件

替换Text Element值
        string[] ugaramStrings = { "கு", "சு", "டு", "து", "பு", "று" };
        string[] tamilvowels =
            {
                "அ",// "\u0b85"
                "ஆ",//"\u0b86"
                "இ",//"\u0b87"
                "ஈ",//"\u0b88"
                "உ",//"\u0b89"
                "ஊ",//"\u0b8A"
                "எ",// "\u0b8E"
                "ஏ",//"\u0b8F"
                "ஐ",//"\u0b90"
                "ஒ",//"\u0b92"
                "ஓ",//"\u0b93"
                "ஔ"//"\u0b94"
            };

如果任何单词具有来自ugaramStrings和tamil元音元素的元素连续。 需要替换ugaram字符串并返回值。

例如。அமர்ந்* துஇ *னிது替换为அமர்ந்* *னிது。 即&=>இ

我是通过使用TextElementEnumerator Class检查下一个字符串元素来完成的。 是否有任何可能性,以便使用RegularExpression

替换它

1 个答案:

答案 0 :(得分:6)

试试这个:

string[] ugaramStrings = { "கு", "சு", "டு", "து", "பு", "று" };
string[] tamilvowels =
{
    "அ",// "\u0b85"
    "ஆ",//"\u0b86"
    "இ",//"\u0b87"
    "ஈ",//"\u0b88"
    "உ",//"\u0b89"
    "ஊ",//"\u0b8A"
    "எ",// "\u0b8E"
    "ஏ",//"\u0b8F"
    "ஐ",//"\u0b90"
    "ஒ",//"\u0b92"
    "ஓ",//"\u0b93"
    "ஔ"//"\u0b94"
};

var rxTemp = "(" +
    string.Join("|", ugaramStrings) + ")(" +
    string.Join("|", tamilvowels) + ")";

var rx = new Regex(rxTemp);

string str = "அமர்ந்*துஇ*னிது";

// This will contain all the matches
var matches = new List<Match>();

string str2 = rx.Replace(str, match => {
    matches.Add(match);
    // Group[1] will contain the ugaram letter, 
    // Group[2] will contain the tamil vowel
    return match.Groups[2].Value;
});

它似乎正常工作。 str2将包含已替换的字符串,而matches将包含所有匹配

请注意,ugaram字符是由字符组成的,例如,每个ugaram&#34;字符&#34;使用两个C#char

例如கு是&#39;க&#39; +&#39;ு&#39;。

这是非法的:

char ch = 'இ';

这是合法的:

string str = "இ"; // str.Length == 2

因此,您不能[குசுடுதுபுறு],但必须(கு|சு|டு|து|பு|று)