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

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

PHPz
PHPz

学习是最好的投资!

membalas semua(7)
小葫芦

Oleh kerana maksud * dalam r'(d*)' ialah untuk memadankan 0 atau lebih, ia tidak boleh memadankan mana-mana aksara. Gunakan re.search untuk mula memadankan dari permulaan rentetan Kerana aksara pertama 'thenextnothingis123456' bukan nombor, ia tidak boleh dipadankan, tetapi r'(d*)' tidak boleh memadankan sebarang aksara, jadi rentetan kosong. dikembalikan.

Dan r'(d+)' memerlukan pemadanan 1 hingga berbilang nombor Apabila digunakan untuk memadankan 'thenextnothingis123456', didapati bahawa aksara pertama bukan huruf, dan ia akan terus mencuba aksara kedua sehingga aksara 1 bermula. . Nombor, jadi "123456" anda boleh melihatnya dengan melihat output di bawah.

>>> 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',)
刘奇

Mengapa kod ini tidak sepadan dengan nombor?

Saya merasakan ia sebenarnya telah dipadankan, iaitu bilangan 0 kali: .group(0) anda tidak melaporkan ralat nonetype, menunjukkan bahawa perlawanan itu berjaya

迷茫

Tutorial pengenalan 30 minit tentang ungkapan biasa

阿神
>>> 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 Hasil ayat ini kosong kerana re.search menggunakan #######2222222
黄舟

Anda mencuba d, dan * bermaksud 0 atau lebih kali

Peter_Zhu
>>> import re
>>> text = 'thenextnothingis123456'
>>> print(re.search(r'(\d+)', text).group(0))
123456
>>>
可以用(\d+)规则匹配~
同问为什么r'(\d*)无法匹配出字符串"123456"?
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan