如何编写正则表达式以在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 हो");
最后一个不起作用:我想包括नाम以使其具体化。
当我使用'w
(我认为应该是'w+
)进行测试时,我得到的各种结果似乎都不一致。例如,राम
由两个天成文书字符和一个空格组成。使用表达式'w
匹配最后一个字符和空格,但使用'w{2}
不匹配这两个字符。我不知道为什么。
使用Unicode属性是否是一种解决方案?即以下工作:
'p{IsDevanagari}+'s
它选择一个或多个连续的天成文书字符,后面跟空格字符。我试过使用'b
,但不起作用。显然,单词边界并不适用于所有Unicode脚本。结果,以下成功:
नाम ('p{IsDevanagari}+) है
我用这个在线测试仪来测试这个(不,我没有关联)。