2012-03-28 3 views
2

Je suis en train de découper une chaîne qui pourrait ressembler à ceci:Regex de Split chaîne à mot particulier motif

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

dans ce

 
International Bank for Reconstruction & Development 
World Bank 

ou tout cela:

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

dans ce

 
International Bank for Reconstruction & Development 

il pourrait y avoir un nombre quelconque de correspondances.

J'ai essayé quelques petites choses, en utilisant des classes de caractères négatifs ne fonctionne pas:

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

J'utilise C# Regex.

+1

Qu'est-ce que vous essayez de diviser * en *? Quels sont les résultats que vous voulez pour chacun de ces exemples? – ruakh

+0

Chaque "nom" dans son propre match. Banque mondiale pour la reconstruction et le développement (SCIAN: 928120; CTI: 6081) Banque mondiale (SCIAN: 928120; CTI: 6081) correspond à cette série de correspondances {Banque internationale pour la reconstruction et le développement, Banque mondiale} –

+1

Une classe de caractères (négative ou pas) correspond à * des caractères individuels *, pas * des séquences de caractères *. Ce '[^ \ (SCIAN: (\ d +); \)] +' est le même que ceci '[^() + :; ACINS \ d] +' – Tomalak

Répondre

0

Si vous voulez juste une expression régulière pour diviser sur ce qui pourrait fonctionner \([^)]*(?:(?:SIC|NAICS):[^)]*)+\)

Vous pouvez le faire sans split. Je prendrais une approche regex de find_all.

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

Soyez averti, cela permettra à non '(SIC:/SCIAN :)' d'être autorisé dans le titre.
Mais, ils ne sont pas le délimiteur droit?

modifier

Mes excuses. Ces deux regexs' peuvent être raccourcies à

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

et

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

+0

Le second est exactement ce que je cherche. –

+0

Super, heureux d'aider! – sln

0

Briser la chaîne en:

International Bank for Reconstruction & Development 
World Bank 

vous pouvez utiliser: http://fiddle.re/bu4a. Essayez .Net!

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

Le premier groupe contiendra « Banque internationale pour la reconstruction & développement », la deuxième - « Banque mondiale »

+0

Cela ne semble pas fonctionner pour moi, je ne reçois aucun match. –