".*"和".*? "的区别
点号表示任意非换行符的字符,星号表示匹配它前面的字符0次或者任意多次。所以".*"表示匹配一串任意长度的字符串任意次。这个时候必须在".*"的前后加其他的符号来限定范围,否则得到的结果就是原来的整个字符串。
".*? ,问号表示匹配它前面的符号0次或者1次。*?的意思就是匹配一个能满足要求的最短字符串。
python
# 正则表达式
# 正则表达式可以提取一大段文本的关键信息。
"""
正则表达式是一段字符串,可以表示一段有规律的信息。
1.正则表达式的基本符号
点号 '.' 一个点号可以代替除了换行符以外的任何一个字符,包括但不限于英文字母、数字、汉字、英文标点符号和中文标点符号
星号 '*' 一个星号可以表示它前面的一个子表达式(普通字符、另一个或几个正则表达式符号)0次到无限次。
问号 '?' 问号表示它前面的子表达式0次或者1次
反斜杠 '\' 搭配其他符号,将普通符号变成特殊符号
数字 \d 来表示
小括号 可以把括号里面的内容提取出来
"""
"""
findall 返回所有满足要求的字符串
re.findall(pattern,string,flags=0)
pattern 表示正则表达式,string表示原来的字符串,flags表示一些特殊功能的标志
"""
import re
content='我的微博密码是:1234567, QQ密码是:33445566, 银行卡密码是:888888, Github密码是:999abc999,'
h=re.findall('密码是:(.*?),',content) # .*?表示符合要求的最短字符串
hh=re.findall('密码是:(.*)',content)
print('密码是:',h) #带问号,表示符合要求的最短字符串
print('密码是:',hh)
①".*":贪婪模式,获取最长的满足条件的字符串。
②".*? ":非贪婪模式,获取最短的能满足条件的字符串。
python
import re
h="""
我是kingname,我的微博密码是:123
456,
"""
hh=re.findall('密码是:(.*?),',h)
hhh=re.findall('密码是:(.*?),',h,re.S) #re.S表示忽略换行符
print(hh)
print(hhh)