如何编写正则表达式以在C#(Unicode/Localization)中查找和替换

本文关键字:Localization 查找 替换 Unicode 正则表达式 何编写 | 更新日期: 2023-09-27 18:28:50

可能重复:
如何编写正则表达式来查找和替换मेरा नाम(राम) है到मेरा नाम(राम) हो在C#中

在结束这个问题之前,先读一次,因为在过去的5个小时里,我一直在研究开发一个开源翻译器,结果我被卡住了。这是关于本地化和Unicode的。这没那么容易。我不得不用梵文写它,因为这就是我正在做的:http://code.google.com/p/nepaliwikipediatranslator

我有两句话。

1) मेरा नाम राम है and   2) मेरा नाम हरी है

这意味着我叫拉姆,我叫哈里

我想查找并替换助动词है到हो

input 1: 
मेरा नाम राम है 
output1:
मेरा नाम राम हो 
input 2: 
उसका नाम हरी है  
output2:
उसका नाम हरी हो

我有这个功能

using System.Text.RegularExpressions;
public class Myclass{
   public static string ReplaceIt(string sentence,string a,string b){
       Regex aRegex = new Regex(a);
       translatedString = aRegex.Replace(sentence, b);
    }
}

我的正则表达式是什么?例如:

Myclass.ReplaceIt("मेरा नाम राम है","('w) है","$1 हो");

当我想包含"名称"一词时,上面的代码有效,但下面的代码无效(नाम)在参数中为:

Myclass.ReplaceIt("मेरा नाम राम है","नाम ('w) है","नाम $1 हो");

最后一个不起作用:我想包括नाम以使其具体化。

如何编写正则表达式以在C#(Unicode/Localization)中查找和替换

当我使用'w(我认为应该是'w+)进行测试时,我得到的各种结果似乎都不一致。例如,राम由两个天成文书字符和一个空格组成。使用表达式'w匹配最后一个字符和空格,但使用'w{2}不匹配这两个字符。我不知道为什么。

使用Unicode属性是否是一种解决方案?即以下工作:

'p{IsDevanagari}+'s

它选择一个或多个连续的天成文书字符,后面跟空格字符。我试过使用'b,但不起作用。显然,单词边界并不适用于所有Unicode脚本。结果,以下成功:

नाम ('p{IsDevanagari}+) है

我用这个在线测试仪来测试这个(不,我没有关联)。