2011-03-30 162 views
5

我有一個正則表達式([[email protected]\/,':\w]*[\w])*它匹配文本中的所有單詞(包括像IBM這樣間斷的單詞),但是我想讓它排除下劃線,我似乎無法弄清楚如何去做。 。我嘗試添加^[_](例如(^[_][[email protected]\/,':\w]*[\w])*),但它只是將所有單詞分解爲字母。我想保留匹配的單詞,但我不想在單詞中包含下劃線,也不希望單詞完全由下劃線組成。正則表達式忽略下劃線

什麼是正確的方法來做到這一點?

P.S.

  • 我的應用程序是用C#編寫的(如果這有什麼區別)。
  • 我無法使用A-Za-z0-9,因爲無論語言(可能是中文,俄文,日文,德文,英文),我必須匹配單詞。

更新
這裏有一個例子: 「I.B.M應該被解析爲一個字w_o_r_d俄羅斯應太:мплексисторическихсобытий。」

的比賽應該是:

I.B.M. 
should 
be 
parsed 
as 
one 
word 
Russian 
should 
work 
too 
мплекс 
исторических 
событий 

注意w_o_r_d不應該得到匹配。

+0

'^ [_]'應該是[[^ _]'。前者將在字符串的開頭匹配'_'(或者如果多行)。 – climbage 2011-03-30 23:56:58

+0

@climbage,肯定有助於忽略下劃線,但這些單詞中的下劃線仍然存在。 – Kiril 2011-03-31 00:07:10

回答

6

試試這個:當你執行的Unicode匹配

([[email protected]\/,':\p{L}\p{Nd}]*[\p{L}\p{Nd}])* 

\w類是由[\p{L}\p{Nd}\p{Pc}]。 (或者乾脆[a-zA-Z0-9]如果你正在做非Unicode匹配。)

這是\p{Pc} Unicode的類別 - 標點/連接器 - 使通過匹配下劃線的問題,所以我們明確地對陣其他類別不包括一。

(這裏的更多信息,"Character Classes: Word Character",在這裏,"Character Classes: Supported Unicode General Categories"

+1

'\ p {L}'和'[\ p {Ll} \ p {Lu} \ p {Lt} \ p {Lo} \ p {Lm}]'相同,這會顯着減少您的正則表達式。請參閱[支持的Unicode常規類別](http://msdn.microsoft.com/zh-cn/library/20bw873z.aspx#SupportedUnicodeGeneralCategories) – 2011-03-31 01:39:20

+0

@jb:Good spot!這是少得多的冗長。我會編輯... – LukeH 2011-03-31 02:05:36

2

Tue下劃線來自\w

改爲使用A-Za-z0-9

+0

嘿sidyll,感謝您的信息,但不幸的是我不能使用A-Za-z0-9,因爲我必須匹配不管語言(可能是中文,俄文,日文,德文,英文)的文字。 – Kiril 2011-03-31 00:00:04