2010-03-29 181 views
2

如何使用Regex來匹配Unicode字符串?我從文本文件中加載了幾個關鍵字,並在另一個文件中將它們與正則表達式一起使用。這兩個關鍵字都包含unicode(如á等)。我不確定問題出在哪裏。有我需要設置的選項嗎?正則表達式不匹配Unicode


代碼:

foreach (string currWord in _keywordList) 
{ 
    MatchCollection mCount = Regex.Matches(
     nSearch.InnerHtml, "\\b" + @currWord + "\\b", RegexOptions.IgnoreCase); 

    if (mCount.Count > 0) 
    { 
     wordFound.Add(currWord); 
     MessageBox.Show(@currWord, mCount.ToString()); 
    } 
} 

和讀取關鍵字列表:

var rdComp = new StreamReader(opnDiag.FileName); 
string compSplit = rdComp.ReadToEnd() 
         .Replace("\r\n", "\n") 
         .Replace("\n\r", "\n"); 
rdComp.Dispose(); 
string[] compList = compSplit.Split(new[] {'\n'}); 

然後我將陣列更改列表。

+0

您可以發佈您的代碼,是一個使用正則表達式的片段?這可能是一個字符集問題(例如,與正則表達式無關),或正則表達式問題,或... – 2010-03-29 13:33:22

+0

你使用什麼樣的正則表達式?請顯示一些代碼。 – 2010-03-29 13:33:38

+1

關鍵字是否始終以單詞字符(即字母,數字或下劃線)開頭和結尾? – 2010-03-29 15:08:17

回答

1

當匹配一個特定的字符時,我認爲正則表達式只支持ASCII字符集的文字。除此之外,您可以使用\ uxxxx來匹配Unicode代碼點。

請參閱here

+0

我不確定這是什麼問題。她/他沒有使用字符類,而是逐字字符串,被字邊界包圍。 – 2010-03-29 14:08:56

+0

@Pietzcker - 這就是問題所在。他/她需要解析字符串並將每個字符添加爲unicode代碼點。 – mbeckish 2010-03-29 20:15:14

+1

那麼,我剛剛嘗試在C#中的正則表達式中使用Unicode文字,並且它完美地工作。 'Console.WriteLine(Regex.Replace(「ItBӦЯӁڀ!」,@「\bBӦЯӁӁڀ\ b」,「works」));'returns' It works!' – 2010-03-29 20:56:13

0

您可以使用[\ u0000- \ uffff] +匹配至少BMP