1
votes

Obtenez une chaîne entre deux mots

Ce \ [(. *?) \] obtient une chaîne entre [ et ] . Maintenant, je veux obtenir une chaîne entre un mot et un autre. J'ai essayé \ wword1 (. *?) \ Wword2 , sans succès. Aidez-moi, qu'est-ce que je fais de mal?

Exemple de chaîne:

Le mot1 du moteur a réussi le mot2 correspondant au mot est dans notre string, en sautant les deux occurrences précédentes des caractères i et s. Si nous avions utilisé l'expression régulière is, elle aurait correspondu à la est dans This.

Exemple de sortie: a réussi


2 commentaires

Supprimez le \ w et vous êtes prêt à partir.


P.S. Je ne veux pas que mot1 et mot2 soient inclus dans la nouvelle chaîne


4 Réponses :


0
votes

Vous pouvez le faire de cette façon -

word1 (.*?) word2

OU

Votre chemin après avoir supprimé le \ w inutile avant et après

word1 ([a-zA-Z\s]+) word2

REGEX: https://regex101.com/r/fsp3FS/20


0 commentaires

0
votes

Lorsque vous ajoutez \ w au modèle, il correspondra à un caractère de mot et il est attendu.

Ce que vous pouvez faire est de le supprimer et de faire correspondre 1+ fois un caractère d'espacement après le premier mot et avant le deuxième mot.

Ensuite, votre correspondance dans le premier groupe de capture:

\bword1\s+(.*?)\s+word2\b

Démo Regex

  • \ b Limite de mot
  • mot1 Correspondre littéralement
  • \ s + Correspond à 1+ fois un caractère d'espacement
  • (. *?) Capturer dans un groupe tout caractère 0+ fois non gourmand
  • \ s + Correspond à 1+ fois un caractère d'espacement
  • mot2 Correspond littéralement
  • \ b Limite de mot


0 commentaires

0
votes

ce [(.?)] obtient une chaîne entre [ et ] .

Non, non, il devrait être \ [[^ \]] * \] pour obtenir n'importe quelle chaîne entre [et]

La solution est: p>

\bword1\b(.*?)\bword2\b

\ w est un caractère de mot [A-Za-z) -9] et bien d'autres. \ b est une limite de mot, ce que vous recherchez. Cela pourrait même être

\bword1(.*?)\bword2

1 commentaires

Merci Lonely Neuron



1
votes

Essayez ceci:

(?<=word1)(stringbetween)(?=word2)


4 commentaires

Cela ne répond pas à la question. Une fois que vous aurez une réputation suffisante, vous pourrez commenter n'importe quel message ; à la place, fournit des réponses qui ne nécessitent pas de clarification du demandeur . - De l'avis


@lelloman Je ne vois pas le problème. Je pense que cela répond à la question.


Cette réponse avait été signalée comme étant de mauvaise qualité et mon commentaire était un modèle généré par l'examen. Je pense toujours que cela pourrait être amélioré avec une explication, "essayez ceci" oui, mais pourquoi est-ce la solution au problème?


@lelloman Je suis d'accord avec vous que certaines explications amélioreraient cette réponse. C'est une solution puisque OP a écrit "Je ne veux pas que mot1 et mot2 soient inclus dans la nouvelle chaîne" et ressemble à (? <=) et (? =) assurez-vous que les choses sont là sans les inclure dans le match.