python - 正则表达式中*的疑问
PHPz
PHPz 2017-04-18 09:53:18
0
7
416
import re
text = 'thenextnothingis123456'
print(re.search(r'(\d*)', text).group(0))

为什么这段代码不能匹配出数字?如果将d替换成w反倒可以匹配出所有字符?

PHPz
PHPz

学习是最好的投资!

répondre à tous(7)
小葫芦

Étant donné que la signification de * dans r'(d*)' est de correspondre à 0 ou plus, il ne peut correspondre à aucun caractère. Utilisez re.search pour commencer la correspondance depuis le début de la chaîne. Étant donné que le premier caractère de « thenextnothingis123456 » n'est pas un nombre, il ne peut pas être mis en correspondance, mais r'(d*)' ne peut correspondre à aucun caractère, donc une chaîne vide. est restitué.

Et r'(d+)' nécessite de faire correspondre 1 à plusieurs nombres. Lorsqu'il est utilisé pour faire correspondre 'thenextnothingis123456', il s'avère que le premier caractère n'est pas une lettre, et il continuera à essayer le deuxième caractère jusqu'à ce que le caractère 1 commence. . Numéro, donc "123456" correspond. Vous pouvez le voir en regardant le résultat ci-dessous.

>>> import re
>>> text = 'thenextnothingis123456'
>>> p = re.search(r'(\d*)', text)
>>> p.start()
0
>>> p.end()
0
>>> p.groups()
('',)
>>> p = re.search(r'(\d+)', text)
>>> p.start()
16
>>> p.end()
22
>>> p.groups()
('123456',)
刘奇

Pourquoi ce code ne peut-il pas correspondre aux chiffres ?

J'ai l'impression qu'il a effectivement été mis en correspondance, ce qui correspond au nombre de 0 fois : votre .group(0) n'a pas signalé d'erreur de non-type, indiquant que la correspondance a réussi

迷茫

Tutoriel d'introduction de 30 minutes sur les expressions régulières

阿神
>>> print(re.search(r'(\d*)', "abcd1234").group(0))  ########11111111

>>> print(re.search(r'(\d*)', "1234abcd").group(0))
1234
>>> print(re.search(r'[a-z]*(\d*)', "abcd1234").group(1))
1234

>>> print(re.search(r'(\d{0})', "abcd1234").group(0))  #######2222222

>>> print(re.search(r'(\d+)', "abcd1234xxx4321").group(0))
1234
>>> print(re.search(r'(\d+)', "abcd1234xxx4321").group(1))   ####可见re.search第一次匹配成功后就不再接着匹配
1234
>>> print(re.search(r'(\d+)', "abcd1234xxx4321").group(2))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: no such group

11111111 Le résultat de cette phrase est vide car re.search utilise #######2222222
黄舟

Vous essayez d, et * signifie 0 fois ou plus

Peter_Zhu
>>> import re
>>> text = 'thenextnothingis123456'
>>> print(re.search(r'(\d+)', text).group(0))
123456
>>>
可以用(\d+)规则匹配~
同问为什么r'(\d*)无法匹配出字符串"123456"?
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal