>>> reg = re.compile(r'^\d{1,3}(,\d{3})*$')
>>> str = '42'
>>> reg.search(str).group()
'42'
>>> reg.findall(str)
['']
>>>
Run Code Online (Sandbox Code Playgroud)
python regex为什么reg.findall一无所获,但reg.search在上面的这段代码中工作?
当你在正则表达式中有捕获组(用括号括起来)时,findall将返回捕获组的匹配; 在您的情况下,捕获的组匹配一个空字符串; ?:如果你想要返回整个比赛,你可以使它不被捕获; re.search另一方面,忽略了捕获组.这些反映在文档中:
re.findall:
返回字符串中pattern的所有非重叠匹配,作为字符串列表.从左到右扫描字符串,并按找到的顺序返回匹配项.如果模式中存在一个或多个组,则返回组列表; 如果模式有多个组,这将是一个元组列表.
研究:
扫描字符串,查找正则表达式模式生成匹配项的第一个位置,并返回相应的MatchObject实例.如果字符串中没有位置与模式匹配,则返回None; 请注意,这与在字符串中的某个点找到零长度匹配不同.
import re
reg = re.compile(r'^\d{1,3}(?:,\d{3})*$')
s = '42'
reg.search(s).group()
?# '42'
reg.findall(s)
# ['42']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1755 次 |
| 最近记录: |