Question Comment obtenir le premier mot dans 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

38
2017-12-06 18:38


origine


Réponses:


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


96
2017-12-06 18:41



Utilisez cette regex

^\w+

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

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

^ représente le début d'une chaîne


À propos de votre regex

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


10
2017-12-06 18:39



N'a pas besoin d'un regex. string[: string.find(' ')]


6
2017-12-06 18:47



Si vous voulez vous sentir particulièrement malin, vous pouvez l'écrire comme suit:

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

Ceci est censé apporter le meilleur des deux mondes:

Je suis en quelque sorte tombé amoureux de cette solution et de sa capacité de décompression générale, alors j'ai dû la partager. :)


4
2017-10-18 12:58



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

3
2017-12-06 18:42



Vous devriez faire quelque chose comme:

print line.split()[0]

2
2018-01-12 13:52