2012-03-28 119 views
2

我試圖分裂一個字符串可能看起來像這樣的:正則表達式分割字符串在特定字紋

 
International Bank for Reconstruction & Development (NAICS: 928120; SIC: 6081) World Bank (NAICS: 928120; SIC: 6081) 

這個

 
International Bank for Reconstruction & Development 
World Bank 

或任何這樣的:

 
International Bank for Reconstruction & Development 
International Bank for Reconstruction & Development (SIC: 6081) 
International Bank for Reconstruction & Development (NAICS: 928120) 

分成這個

 
International Bank for Reconstruction & Development 

可能有任何數量的匹配。

我已經嘗試了幾件事情,用反面的人物類不起作用:

[^\(NAICS: (\d+);\)]+ 

我使用C#正則表達式。

+1

什麼是你想給它*分割成*?你希望每個例子有什麼結果? – ruakh 2012-03-28 22:32:52

+0

每個「名字」進入它自己的比賽。所以國際復興開發銀行(NAICS:928120; SIC:6081)世界銀行(NAICS:928120; SIC:6081)匹配這組比賽{國際復興開發銀行,世界銀行} – 2012-03-28 22:45:05

+1

一個字符類不)匹配*單個字符*,而不是*字符序列*。這個'[^ \(NAICS:(\ d +); \)] +'與這個[[^()+:; ACINS \ d] +' – Tomalak 2012-03-28 22:45:46

回答

0

如果你只是想要一個正則表達式拆就這可能工作\([^)]*(?:(?:SIC|NAICS):[^)]*)+\)

你可以做到這一點沒有分裂。我會採取find_all正則表達式的方法。

(?!\s*$)(.*?)(?:\([^)]*(?:(?:SIC|NAICS):[^)]*)+\)|$) 
Modifiers: s (dot allows newline) and g (global) 

被警告,這將允許在標題中允許非'(SIC:/ NAICS :)'。
但是,他們不是正確的分隔符?

編輯

我的道歉。這兩個regexs'可縮短至

\([^)]*(?:SIC|NAICS):[^)]*\)

(?!\s*$)(.*?)(?:\([^)]*(?:SIC|NAICS):[^)]*\)|$)

+0

第二個正是我正在尋找的。 – 2012-03-28 23:55:41

+0

太好了,很高興幫助! – sln 2012-03-29 00:04:27

0

打破串入:

International Bank for Reconstruction & Development 
World Bank 

你可以使用:http://fiddle.re/bu4a。試試.Net!

^([^\(]+) \([^\)]+\) ([^\(]+) \([^\)]+\) 

,第一組將包含「國際復興開發銀行&發展」,第二個 - 「世界銀行

+0

這似乎不適用於我,我沒有得到任何匹配。 – 2012-03-28 23:02:12

相關問題