2016-09-04 4 views
1

Je souhaite faire correspondre des chaînes spécifiques du début au 5e mot du titre de l'article.Expression régulière pour la chaîne de correspondance dans les cinq premiers mots de la phrase d'entrée

Chaîne d'entrée:

The 14 best US colleges in the West are dominated by California — here's who makes the cut. 

regex:

/^.*(\bbest\b|\btop\b|\bhot\b).*$/ 

Actuellement apparié titre d'un article entier mais que vous voulez rechercher jusqu'à "collèges". et aussi besoin d'ignorer ou non appariés des chaînes comme un ordinateur portable, point chaud, etc.

Répondre

0

Vous pouvez utiliser cette expression

^((?:\w+\s?){1,5}).* 

Explication:

^ position assert au début de la chaîne

\w+ correspond à n'importe quel caractère de mot

\s? correspond à aucun caractère d'espace blanc

{1,5} Quantifier - Entre 1 et 5 fois, autant de fois que possible

.* correspond à tout caractère (sauf newline)

Cela correspond à 5 premiers mots (et espaces) .

+0

Comment puis-je ignorer pour correspondre%, $ ou n'importe quel caractère spécial et aussi la longueur de la chaîne numérique est inférieure à 4. Besoin d'ignorer les types suivants de senstense. 1. Impression 3D d'un affichage matriciel LED. 2. Gagnant de la bourse d'études LIFT 2016 Luis Camacho Caballero. 3. 15 $ est le nouveau prix pour la couverture mobile. @manaR – santosh

+0

Je suppose que vous pourriez d'abord faire correspondre ces chaînes, les exclure de votre fichier, puis faire la correspondance normale? – manaR

0
^(\w+\s){0,4}\b(best|top|hot)(\s|$) 

Vous souhaitez faire correspondre une chaîne dans les cinq premiers mots de la phrase d'entrée. Ensuite, s'il est compté depuis le début de la phrase, il doit y avoir 0-4 mots avant le mot que vous voulez faire correspondre. Donc, vous avez besoin de ^(\w+\s){0,4} avant les mots spécifiques que vous voulez faire correspondre. Voir https://regex101.com/r/nS0dU6/4

+0

Merci fonctionne parfaitement, mais puis-je utiliser + ou tout autre opérateur au lieu de virgule dans {0,4}. – santosh

+0

@santosh Je ne comprends pas ce que vous entendez par "utiliser + ou tout autre opérateur au lieu de virgule dans {0,4}". – ltux

0

regex101 vient à aide encore.

^(?=(?:\w+\s){0,4}?(?:best|top|hot)\b(?!-))(\w+(?:\s\w+){0,4})

  • (?=(?:\w+\s){0,4}?(?:best|top|hot)\b(?!-) vérifie que le mot-clé est dans le premier 5 (notez que (?!-) est ajouté pour répondre à des mots tels que hot-spot)
  • (\w+(?:\s\w+){0,4}) correspond alors les 5 premiers mots maximum
+0

Merci fonctionne parfaitement mais puis-je utiliser + ou tout autre opérateur au lieu de virgule dans {0,4}. – santosh

+0

Je ne pense pas. Pourquoi? –

+0

Comment puis-je ignorer pour correspondre%, $ ou n'importe quel caractère spécial et aussi la longueur de la chaîne numérique est inférieure à 4. Besoin d'ignorer les types suivants de senstense. 1.3D Imprimer un affichage matriciel LED. 2. Gagnant de la bourse LiFT 2016 Luis Camacho Caballero. 3. 15 $ est le nouveau prix pour la couverture mobile. – santosh