请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师 ,你好。正则表达式问题

import re

a = 'adsfasdPythonPythonPythonPythonPythonsdfsdfa'

r = re.findall('(Python){1,}',a)

w = re.findall('Python{1,}?',a)

print(r)

print(w)

#对于打印出的结果不是很懂


正在回答 回答被采纳积分+3

1回答

runzx 2017-10-24 12:10:57

r 是重复(Python)且贪婪模式,所以 匹配'PythonPythonPythonPythonPython'了这个,返回的分组为()里的python,所以结果是[' python']

w 只是'n'字符重复1次以上且非贪婪,所以匹配了5个'Python',结果为['Python','Python','Python','Python','Python']

0 回复 有任何疑惑可以回复我~
  • 提问者 森林木一 #1
    如果  r = re.findall('(Python){1}',a) 
    打印出的结果是 PythonPythonPythonPythonPython  
    为什么不是一个Python 呢?
    回复 有任何疑惑可以回复我~ 2017-10-25 10:58:55
  • 慕函数7353421 回复 提问者 森林木一 #2
    {1}和{1,}的区别就在于{1}只匹配一次,{1,}会匹配尽量多次啊,所以{1}匹配到的是5个Python,{1,}匹配到的是 1个PythonPythonPythonPythonPython,而当findall里面有()分组的时候,只会返回分组匹配的数据,所以{1}返回了5个“Python”,{1,}返回了1个“Python”,懂了么
    回复 有任何疑惑可以回复我~ 2017-10-25 12:28:09
  • 这就是贪婪模式的体现,顾名思义,贪婪就是尽可能多的匹配符合要求的字符串。
    
    而贪婪模式是系统默认的。
    回复 有任何疑惑可以回复我~ 2017-10-25 19:40:59
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信