web-dev-qa-db-fra.com

Comment obtenir le premier mot de la chaîne

le texte est:

WYATT    - Ranked # 855 with    0.006   %
XAVIER   - Ranked # 587 with    0.013   %
YONG     - Ranked # 921 with    0.006   %
YOUNG    - Ranked # 807 with    0.007   %

Je veux obtenir seulement

WYATT
XAVIER
YONG
YOUNG

J'ai essayé :

(.*)?[ ]

Mais ça me donne le:

WYATT    - Ranked
51
Vor

Regex est inutile pour cela. Utilisez simplement some_string.split(' ', 1)[0] ou some_string.partition(' ')[0].

129
Silas Ray

Utilisez cette regex

^\w+

\w+ Correspond à 1 à plusieurs caractères.

\w Est similaire à [a-zA-Z0-9_]

^ Décrit le début d'une chaîne


à propos de votre regex

Votre regex (.*)?[ ] Devrait être ^(.*?)[ ] ou ^(.*?)(?=[ ]) si vous ne voulez pas d'espace

10
Anirudha

Vous n'avez pas besoin d'un regex. string[: string.find(' ')]

7

Si vous voulez vous sentir particulièrement sournois, vous pouvez l'écrire ainsi:

(firstWord, rest) = yourLine.split(maxsplit=1)

Ceci est censé apporter le meilleur des deux mondes:

Je suis tombé en amour avec cette solution et sa capacité de décompression générale, donc je devais la partager. :)

6
Huge

Vous devriez faire quelque chose comme:

print line.split()[0]
3
Nado

Vous n'avez pas besoin de regex pour diviser une chaîne sur des espaces:

In [1]: text = '''WYATT    - Ranked # 855 with    0.006   %
   ...: XAVIER   - Ranked # 587 with    0.013   %
   ...: YONG     - Ranked # 921 with    0.006   %
   ...: YOUNG    - Ranked # 807 with    0.007   %'''

In [2]: print '\n'.join(line.split()[0] for line in text.split('\n'))
WYATT
XAVIER
YONG
YOUNG
2
Lev Levitsky