在C#中匹配西里尔符号

时间:2011-10-28 07:51:52

标签: c# regex

我有一个巨大的代码文件,包含许多这样的代码:

Enterprise::TextMessageBox::Show(String::Format(S"Възникнал е проблем:\n\n{0}", e->Message), S"Грешка");

我要做的是找到代码的每个部分,其中包含一系列cyrilic符号和我提供的另一个文本。我的问题是,我似乎无法做出好的表达,所以我可以抓住线条。 另一个问题是,有些行只包含一个这样的字符串,但有时候它们在一行中包含2个或更多。

每个这样的字符串都是相似的,它看起来像这样:

S"some cyrilic symbols"

我尝试用Regex类制作它,但我似乎无法为字符串制作足够好的模式。

3 个答案:

答案 0 :(得分:8)

好的,您可以匹配Unicode属性。试试这样的事情

Regex TheRegex = new Regex(@"S""[\p{IsCyrillic}\p{P}\p{N}\s]*""");

\p{IsCyrillic}匹配任何西里尔字符

\p{P}是标点符号的unicode类别

\p{N}是任何语言中数字的unicode类别

\s匹配空白

See here on msdn了解有关unicode类别的更多信息,并在此处regular-expressions.info

答案 1 :(得分:0)

你可以尝试用这三种方式之一打开你的文件,这取决于它是如何保存的,但对我来说规则是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)){...}

答案 2 :(得分:0)

试试这个正则表达式: -

    Match match = Regex.Match(input, @"YourReplacementText",
    RegexOptions.Multiline | RegexOptions.IgnoreCase);

// Here we check the Match instance.
if (match.Success)
{
    // Do your stuff
}

输入 - 这是您的cyrilic输入字符串

YourReplacementText - 这是你的cyrilic替换字符串

RegexOptions.Multiline | RegexOptions.IgnoreCase - 表示此正则表达式,忽略大小写并检查多行。

Regexp的简短表示法:

/Грешка/gim

Грешка - 将此文字更改为您想要的文字以便更换/匹配

- 代表ignorecase

m - 代表多行

g - 表示全局,用于迭代匹配