Expression régulière pour la mise en correspondance non-blanc en Python
Je veux utiliser re.recherche pour extraire le premier ensemble de non-caractères espace. J'ai le texte suivant pseudoscript qui recrée mon problème:
#!/usr/bin/env python2.7
import re
line = "STARC-1.1.1.5 ConsCase WARNING Warning"
m = re.search('^[^\S]*?',line)
if m:
print m.group(0)
Il semble être l'impression de l'espace au lieu de STARC-1.1.1.5
Donc autant que je le comprends, cette expression régulière est en train de dire:
Au début de la ligne, trouver un ensemble de nonwhitespace personnages, de ne pas être gourmand
J'étais sûr que ce serait le travail, la la documentation dit que je peux utiliser /S pour correspondre à des espaces dans [], donc je ne sais pas où est la question.
Maintenant, je sais, je sais c'est probablement ce qui fait un peu bizarre, pourquoi ne suis-je pas utiliser une autre fonction pour faire cela? Eh bien, il n'y a plus d'une façon à la peau d'un chat et je suis encore en train de les accrocher des expressions régulières en Python donc je voudrais savoir comment je peux utiliser ré.recherche pour extraire ce domaine dans ce mode.
- en voici une autre ré.split ("\\s*", ligne)[0]
- re c'est gourmand. il l'habitude de fractionnement sur une chaîne vide ici
- J'ai essayé et obtenu
FutureWarning: split() requires a non-empty pattern match.
Avec\s+
je n'ai pas eu un avertissement. - j'ai aussi essayé en python 2.7 avec ipython et a obtenu le résultat souhaité
- Mon test a été avec 3.5.2. J'ai également obtenu le résultat souhaité dans les deux cas, mais seulement
\s+
n'ai pas de déclencher une alerte enre.py:203
.
Vous devez vous connecter pour publier un commentaire.
La
[^\S]
est un nié la classe de caractères qui est égal à\s
(espaces motif). Le*?
est un paresseux quantificateur qui correspond à zéro ou plusieurs caractères, mais aussi peu que possible, et lorsqu'il est utilisé à la fin du motif jamais réellement correspond à tous les caractères.Vous remplacer
m = re.search('^[^\S]*?',line)
ligne avecou - si vous souhaitez également permettre à une chaîne vide match:
La
re.match
méthode ancre le modèle au début de la chaîne. Avecre.search
, vous avez besoin de garder le^
ancre au début du modèle:Voir le Python démo:
Cependant, ici, dans ce cas, vous pouvez simplement utiliser un simple
split()
:Voir un autre Python démo.
\s
correspond à un caractère d'espacement.\S
correspond à un caractère non-blanc.[...]
correspond à un caractère de l'ensemble...
.[^...]
correspond à un caractère qui n'est pas dans le jeu...
.[^\S]
correspond à un caractère qui n'est pas un caractère non-blanc, c'est à dire qu'il correspond à un caractère d'espacement.