2010-11-12 3 views
0

Pouvez-vous s'il vous plaît nous aider à extraire mot d'une phrase comme:Comment écrire ce modèle en regex?

Il a dirigé les efforts américains pour la gestion axée sur le gouvernement depuis, ce qui dans les missions dans la région.

Comment pouvons-nous avoir:

He's 
led 
U.S. 
efforts 
for 
government-centered 
management 
ever 
since 
resulting 
in 
the 
missions 
to 
the 
area 

Merci beaucoup à l'avance.

Modifier et commentaire:

Nous remercions tous pour votre aide genre.

+1

Vous voulez dire enlever. et, de votre phrase sans enlever le. en nous ? –

+0

Quel moteur regex utilisez-vous? –

Répondre

1

Dans votre cas, vous pouvez diviser le regex

(?:(?<![A-Z])\.|,)?(\s+|$) 

Cette séparation sur les espaces, éventuellement précédée d'un point/virgule (mais sur le point que si elle est pas précédée d'une lettre ASCII majuscule).

Il échouera sur les cas de bord comme etc., donc si vous en avez une liste, vous pouvez les travailler dans la regex si votre moteur regex prend en charge la répétition variable dans lookbehinds. Lequel utilisez-vous?

E. g.

(?:(?<![A-Z]|\betc|\bca|\bapprox)\.|,)?(\s+|$) 

fendrait

He's led U.S. efforts for management, resulting in approx. 3 times the missions to the area, etc. 

dans

He's 
led 
U.S. 
efforts 
for 
management 
resulting 
in 
approx. 
3 
times 
the 
missions 
to 
the 
area 
etc. 

Explication:

(?:   # match either... 
(?<![A-Z] # (as long as not preceded by A-Z 
    |\betc  # or etc 
    |\bca  # or ca 
    |\bapprox # or approx 
)   # ...) 
\.   # a dot 
|   # or 
,   # a comma 
)?   # if present. 
(\s+|$)  # then either match whitespace or the end of the string. 
+0

Merci à tous pour vos réponses. comment pouvons-nous avoir ce trait d'union inclus comme "égocentrique"? – Dylan

+0

@ user482742: Que voulez-vous dire? Voulez-vous séparer le trait d'union, contrairement à votre exemple ci-dessus où «centré sur le gouvernement» reste ensemble? –

+0

Cher Tim Pietzcker, merci et à tous pour vos réponses. – Dylan

1

Vous allez avoir du mal à distinguer entre etc. et area. (Ou, comme dans votre exemple, U.S. et area.. Voir également une phrase comme « Il a dirigé de nombreux efforts aux États-Unis », où vous n » t double de la période à la fin d'une phrase le mieux que vous obtiendrez est proche

1

Selon la saveur de regexp que vous utilisez, vous pouvez aller avec ce qui suit:..

/\b(\S+[^,.])\b/ 

en tant alternative, vous remplacez le [^,.] avec des points de code Unicode \P{P}.

EDIT:

Une expression beaucoup plus simple fonctionne sur le niveau des mots, mais il correspondra U.S au lieu de U.S.:

/\w\S+\w/ 
1

Pour le U.S. vous devez spécifier que bareword dans le regex . Donc, votre regex sera comme:

\s?(U\.S\.|.*?)[., ] 

Cela a fonctionné pour moi.