在c#中匹配西里尔符号
本文关键字:符号 | 更新日期: 2023-09-27 18:12:51
我有一个巨大的代码文件,有很多行,像这样:
Enterprise::TextMessageBox::Show(String::Format(S"Възникнал е проблем:'n'n{0}", e->Message), S"Грешка");
我要做的是找到与我提供的另一个文本的西里尔符号字符串的代码的每一部分。我的问题是,我似乎不能做出足够好的表达,所以我可以抓住台词。另一个问题是,有时行只包含一个这样的字符串,但有时它们在一行中包含2个或更多。
每个这样的字符串都是相似的,看起来像这样:
S"some cyrilic symbols"
我试图使它与Regex类,但我似乎不能使足够好的模式的字符串。
你有可能匹配Unicode属性。试试这样写
Regex TheRegex = new Regex(@"S""['p{IsCyrillic}'p{P}'p{N}'s]*""");
'p{IsCyrillic}
匹配任何西里尔字符
'p{P}
是标点符号的unicode类别
'p{N}
是任何语言中数字的unicode类别
's
匹配空格
有关unicode分类的更多信息,请参阅msdn和regular-expressions.info.
你可以试着用这三种方式之一打开你的文件,这取决于它是如何保存的,但对我来说,规则是string
是unicode,所以这些读取编码原生字符到unicode,然后Regex
应该工作。
/* Open OEM File*/
FileStream f1 = new FileStream(@"..'..'Datas'TestOEM.txt",FileMode.Open);
StreamReader sw1 = new StreamReader(f1,
Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage));
string a = sw1.ReadLine();
Console.WriteLine(a);
sw1.Close();
f1.Close();
/* Open Unicode file */
FileStream f2 = new FileStream(@"..'..'Datas'TestUNICODE.txt",FileMode.Open);
StreamReader sw2 = new StreamReader(f2,Encoding.Unicode);
string b = sw2.ReadLine();
Console.WriteLine(b);
sw2.Close();
f2.Close();
/* Open ANSI file */
FileStream f3 = new FileStream(@"..'..'Datas'TestANSI.txt",FileMode.Open);
StreamReader sw3 = new StreamReader(f3,Encoding.Default);
string c = sw3.ReadLine();
Console.WriteLine(c);
sw3.Close();
f3.Close();
可以循环使用正则表达式
Regex reg0 = new Regex(@"Възникнал е проблем",
RegexOptions.Compiled | RegexOptions.IgnoreCase);
if (reg0.IsMatch(string from file)){...}
试试这个regexp:-
Match match = Regex.Match(input, @"YourReplacementText",
RegexOptions.Multiline | RegexOptions.IgnoreCase);
// Here we check the Match instance.
if (match.Success)
{
// Do your stuff
}
input -这是你的西里尔字母输入字符串
YourReplacementText -这是你的西里尔字母替换字符串
RegexOptions。Multiline | RegexOptions。IgnoreCase -表示此正则表达式,忽略大小写并检查多行
Regexp的简写法:
/Грешка/gim
Грешка -将此文本更改为您想要替换/匹配的文本
i -表示ignorecase
m -表示多行
g -表示全局,用于迭代匹配