Correspondre à un modèle qu'une seule fois
J'ai une chaîne
foo-bar-bat.bla
Je souhaite correspondre qu'à foo
Mon imparfait modèle correspond à la fois à foo
et bar
\w+(?=-.*\.bla)
Comment dois-je jeter bar
? Ou peut-être même mieux, comment pourrais-je arrêter de correspondance des trucs après foo
?
- Vous pouvez arrêter de correspondance après le premier match (soit avec
Matcher
oureplaceFirst
), ou dois-je raté quelque chose? - Mon commentaire était plus tôt à propos de Java, mais je pense qu'il y a l'équivalent de construire dans d'autres langues, pour s'arrêter au premier match. Le seul cas que mon commentaire ne s'applique pas lorsque vous utilisez un certain genre d'outil. Mais il y a toujours une astuce pour contourner ce problème, si vous donnez plus d'exemple et de contexte.
- Quelle est la relation entre les foo et bar? Ne bar doivent être présents?
- Combien votre chaîne d'entrée varient? Est-il toujours les trois caractères, un tiret, trois caractères, un tiret, trois caractères, le point, 3 caractères?
- Oui, il va toujours avoir le même format. J'ai essayé de tester Hugo regex (pythonregex.com) en ajoutant un accent circonflexe: ^\w+(?=-.*\.bla) Semble comme ça devrait fonctionner, mais dans pythonregex.com il n'a donné aucun résultat. J'ai utilisé le test suivant des données: asf.asf-asf.bla bla-bla-boo.bla foo-bar-bat.bla Sans le signe le test de produit: >>> regex.findall(string) [u'asf', u'bla', u'bla', u'foo', u'bar']
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le modèle suivant (aussi longtemps que vos chaînes sont toujours formaté de la façon dont vous dit) :
Modifier live sur Debuggex
La
^
signe correspond au début de la chaîne. Et ainsi va prendre le premier match de la chaîne.La
?=
est de s'assurer que le groupe suivant n'est pas capturé, mais il est présent.[foo]bar-r.bla
, tandis que la regex dans la question va correspondre à l'exemple que j'ai donner.Le départ
^
moyen de début correspondant à partir du début de la chaîne. Le charactergroup[^-]
moyens de rechercher tout ce qui n'est pas un tableau de bord. Le+
signifie que le charactergroup devrait correspondre à un personnage en une ou plusieurs fois.\w
([A-Za-z0-9_]
), alors que vous permettez à tous les sorte de caractère à rechercher.^\w+-
\.bla
L' ".*" une partie de votre expression correspond à "la barre."
^\w+(?=-.*)
Cette expression se lit comme "Au début d'une chaîne, au moins un caractère, puis (mais pas includeded dans le match) un TIRET suivi par quoi que ce soit"