正则表达式
目录
常用的正则表达式
方案 | 代码 |
---|---|
年份表达 | ^((19|20)\d{2})$ |
手机号码 | ^1[3456789]\d{9}$ |
E-mail地址 | ^[\w-]+(.[\w-]+)*@[\w-]+(.[\w-]+)+$ |
网址URL | http: //(/[\w-]+.)+[\w-]+(/[\w-./?%&=]) |
正则表达式用于解决字符串,重在处理规则
一些逻辑分组
字符分类
普通字符
import re
re.findall("p","python") #['p']
re.findall("python","I like python") #['python']
re.findall("p","I love python") #['o''o']
预定义字符
字符 | 含义 | 字符 | 含义 |
---|---|---|---|
\d | 所有的数字 | \D | 所有的非数字 |
\w | 包含下划线的字符 | \W | 非下划线与字符 |
?? | 除下划线的特殊字符 | ?? | 非除下划线的特殊字符 |
\s | 空白符 ,制表符\t ,换行符\n |
\S | 非格式字符 |
元字符
[]匹配一个字符,括号内为或的关系,如[123]
或者[1-3]
表示为1或者2或者3的字符
一些功能性符号
^
在与预定义字符和元字符一起使用时为取反,也就是说\s
=^\S
-
代表区间()
表示分组,括号外的参与搜索但是不参与输出{}
重复匹配:{3}
重复3次,{n,m}
重复n-m次,可以留空{}?
在与预定义字符和元字符一起使用时表示非贪婪匹配(默认是贪婪匹配),如{n,m}?
基本上等价于{n}
?
表示前面的字符出现0次或1次+
表示前面的字符出现至少一次*
表示前面的字符出现0次或任意次r"……"
转义符\
.
表示非换行符的一切字符
反向引用
wordstr=""" 'hello' "python" 'love" 'haha" """
result = re.findall(r"['/"]\w+["/']",worldstr) #无法选出引号正确的词组
result = re.findall(r"('|\")(\w+)(\1)",worldstr) #能够选出引号正确的词组
print([x[1] for x in result])
例子,寻找包含3个相同连续数字
result = re.findall(r"(\d)\1{2,}","122223")
print([x[0]+x[1] for x in result])
位置匹配
^
表示从开头$
表示到结尾
python相关函数
findall
以列表的方式返回全部匹配结果
match
从头开始匹配,匹配成功就返回
search
字符串内查找,找到匹配就返回
split分割
print("1 2 3 4".split(" "))
split_list = re.split(r"[\+\-\*\/]","1+2*3/4-40")#利用计算符号对算式进行分割
sub replace
myLine = "i am snipper, i like swimming"
re.sub(r'i','I',myLine,3)#用I替换I,最多替换3次
分组group
findall的使用方法见上面
result = re.match(r'h(.*)(\d{3})',hfadfadf2323adf223)
#正常输出
print(result.group()) #hfadfadf2323adf223
print(result.group(0)) #hfadfadf2323adf223
#输出第一个括号
print(result.group(1)) #fadfadf2323adf
#输出第二个括号
print(result.group(2)) #223
# ????为啥没有h了???
听课进度:1h30min