2012-03-28 120 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

相关问题