ma = pa.findall(r'')
In [67]: ma = pa.findall(r'')
In [68]: print ma
['']
In [69]: ma = pa.findall(r' ')
In [70]: print ma
['', '']
看上面应该能明白了吧
*号表示紧跟在它前面的单元应匹配零次或多次,也就是说在单元[a-z]中匹配零次或者多次,而[A-Z]中只匹配以此,你输入的字符串连续两个大写字母就只能匹配第一个,后面的无法匹配。
+代表前边的值匹配至少一次,也就是在下划线之前,你至少要有一个【a-zA-Z】范围的值,你是以下划线开始的,所以匹配失败
正则表达式在进行数量匹配时有{},+,*,?其中.*代表匹配除换行符以外的任意字符任意次,可以是0次。.代表除换行符以外的任意字符,*代表任意次,相当于{0,} 后边多一个?表示懒惰模式。必须跟在*或者+后边用.*? 是懒惰匹配,一旦匹配到第一个就不往下走了。.*+是无限匹配直到最后一个。
我知道了,match函数是从字符串的开始匹配的,正则表达式的每一部分都跟字符串的开始匹配
[1-9]?[0-9]:
这个里面是两个部分[1-9]?和[0-9]
第一部分:是匹配1到9之间的数字出现0次或1次
第二部分:是匹配0到9之间的数字至少出现一次
所以匹配‘09’这个字符串的时候,第一部分中不包含‘0’这个字符串,暂时的匹配结果为‘’(即空字符串),所以执行第二部分,第二部分包含‘0’,暂时的匹配结果为‘0’,匹配结束,输出结果‘0’
因为你后面还有个[0] 所以就匹配到了,去掉最后那个[0],就只能匹配0
要转义哪个字符?
[0-9][a-z]*? 匹配2个 因为[0-9]要匹配一个,[a-z]*?最少匹配0个,所以[0-9][a-z]*?就是1个元素
+?最少匹配一个 [0-9][a-z]+? 就是2个元素
( 上面那个打错了 )
用户中断 Ctrl+C
* 可以匹配 1 次,*代表的是匹配前一个字符零次或者无限次。
+号匹配一次或多次,*号匹配0次或者多次
r'[A-Z][a-z] 你就只有一个'A' 啊
你写的表达式是匹配第一个大第二个小啊,二个都匹配到才有值,否则是 NoneType
这个可以满足你:r'[A-Z][a-z]?', 'A') 或 r'[A-Z]', 'A'
re模块中的match方法匹配是从开头开始的
对,但是只能匹配一次,如果相匹配多次就要用到老师这次讲的知识
应该是可以的,我试了试,你是不是没有注意到× ? + 要转义的原因