2010-05-14 78 views
4

我正在C#中進行一些OCR工作,並提取了需要處理的文本。現在我需要使用正則表達式解析一行。字符串上Unicode字符的正則表達式

string checkNum; 
string routingNum; 
string accountNum; 
Regex regEx = new Regex(@"\u9288\d+\u9288"); 
Match match = regEx.Match(numbers); 
if (match.Success) 
    checkNum = match.Value.Remove(0, 1).Remove(match.Value.Length - 1, 1); 
regEx = new Regex(@"\u9286\d{9}\u9286"); 
match = regEx.Match(numbers); 
if(match.Success) 
    routingNum = match.Value.Remove(0, 1).Remove(match.Value.Length - 1, 1); 
regEx = new Regex(@"\d{10}\u9288"); 
match = regEx.Match(numbers); 
if (match.Success) 
    accountNum = match.Value.Remove(match.Value.Length - 1, 1); 

的問題是,字符串中包含了必要的Unicode字符當我做了.ToCharArray(),檢查字符串的內容,但它似乎從來沒有當我解析找他們串識別Unicode字符。我認爲C#中的字符串默認是Unicode。

回答

3

我想通了。我用我應該用\u2448 and \u2446http://www.ssec.wisc.edu/~tomw/java/unicode.html#x2440

謝謝你們領導我的方向是正確的十進制值而不是十六進制代碼 換句話說,而不是使用\u9288 and \u9286

+0

您應該接受此答案,以防止線程每隔幾個月自動重新啓動。並且使用'regex'標籤而不是像'regularexpressions'這樣的變體 - 這是一個正則表達式專家尋找的(儘管事實證明這畢竟不是真正的正則表達式問題)。 – 2010-05-15 09:57:58

0

.NET中的字符串是UTF-16 encoded

此外,正則表達式引擎不匹配Unicode字符,而是針對Unicode代碼點。見this post

1

這條線:

match.Value.Remove(0, 1).Remove(match.Value.Length - 1, 1); 

導致異常,因爲從第一Remove所得長度比原始match.Value.Length小。

我建議你使用組來提取值。例如:

Regex regEx = new Regex(@"\u9288(\d+)\u9288"); 
Match match = regEx.Match(numbers); 
if (match.Success) 
    checkNum = match.Groups[1].Value; 

因此,我可以正確提取這些值。