1. 特殊字符
- ^ $ * ? + {2} {2, } {2, 5} |
- [] [^] [a-z] .
- \s \S \w \W
- [\u4E00-\u9FA5] () \d
2. 示例
^ $ . * 示例
import re
line = "maben123123"
# 以m开头,.中间任意字符,*任意多个,以3结尾
regex_str = "^m.*3$"
match_obj = re.match(regex_str, line )
if match_obj:
print('yes')
>>> yes
贪婪模式 示例
import re
line = "mabenbb123123"
# 这里默认是贪婪模式,从后端开始匹配,先找到第一个b,.*代表任意字符任意长度,再到第二个b,这样就导致直接匹配出两个b
regex_str = ".*(b.*b).*"
match_obj = re.match(regex_str, line )
if match_obj:
print(match_obj.group(1))
>>> bb
? 与 贪婪模式 示例
import re
line = "mabenbbasdbb123123"
'''
?代表正向,且只取第一个(非贪婪),先找到第一个b,.*代表任意字符任意长度,再到第二个b,这样就直接匹配出benb。
这里,第一个?起到正向匹配的作用,第二个?起到只取一个(非贪婪)的作用,如没有第二个?会输出benbbasdbb
'''
regex_str = ".*?(b.*?b).*"
match_obj = re.match(regex_str, line)
if match_obj:
print(match_obj.group(1))
>>> benb
+ 示例
import re
line = "mabenbbasdbb123123"
# +代表中间至少出现一次,这样bb就不符合要求了,故会出现basdbb
regex_str = ".*(b.+b).*"
match_obj = re.match(regex_str, line)
if match_obj:
print(match_obj.group(1))
>>> basdbb
{1} 示例
import re
line = "mabenbbbasdbb123123"
# {1}代表必须出现一次,故只有bbb符合
regex_str = ".*(b.{1}b).*"
match_obj = re.match(regex_str, line)
if match_obj:
print(match_obj.group(1))
>>> bbb
{2,} 示例
import re
line = "mabenbbbasdbb123123"
# {2, }代表至少出现两次,故只有basdbb符合,从后往前匹配。
regex_str = ".*(b.{2,}b).*"
match_obj = re.match(regex_str, line)
if match_obj:
print(match_obj.group(1))
>>> basdbb
{2,3} 示例 注:{2, 3}是错误的写法,,后不能有空格
import re
line = "mabenbbbasdbb123123"
# {2,3}至少出现2次,至多出现3次,从后端开始匹配,故basdb
regex_str = ".*(b.{2,3}b).*"
match_obj = re.match(regex_str, line)
if match_obj:
print(match_obj.group(1))
>>> basdb
| 以及 group 示例
import re
line = "mabben123123"
# | 代表或的意思,但是如果两个别打是同时满足,会默认匹配第一个
regex_str = ".*((maben|mabben)123).*"
match_obj = re.match(regex_str, line)
if match_obj:
# group()中数字0或空代表提取全部内容,1代表提取括号中的内容,2代表提取两层括号中的内容
print(match_obj.group(0))
print(match_obj.group(1))
print(match_obj.group(2))
[ ] 示例
import re
line = "15902992018"
# []中的意思是满足其中任意一个
regex_str = "(1[35789][0-9][^1]{9})"
match_obj = re.match(regex_str, line)
if match_obj:
print(match_obj.group(1))
>>> 15902992018
总结[ ]的用法 :
[0-9] 代表一个区间内的所有字符
[45786] 代表中括号中的所有字符
[^1]{9} 代表接下来的9位中不能有1
[.] 代表 .号 本身
部分常用表达式:
\s 匹配任意空白字符,等价于 [\t\n\r\f].
\S 匹配任意非空字符
\w 匹配字母数字及下划线,等价于 [0-9_a-zA-Z]
\W 匹配非字母数字及下划线
\d 匹配任意数字,等价于 [0-9].
\D 匹配任意非数字
[\u4E00-\u9FA5] 示例1
import re
line = "你好s"
# [\u4E00-\u9FA5]是unicode编码中的汉字范围,只提取汉字,+代表多个。
regex_str = "([\u4E00-\u9FA5]+)"
match_obj = re.match(regex_str, line)
if match_obj:
print(match_obj.group(1))
>>> 你好
[\u4E00-\u9FA5] 示例2 从英文中提取中文
import re
line = "studay in 北京大学"
# [\u4E00-\u9FA5]是unicode编码中的汉字范围,只提取汉字,+代表多个。
regex_str = ".*?([\u4E00-\u9FA5]+大学)"
match_obj = re.match(regex_str, line)
if match_obj:
print(match_obj.group(1))
>>> 北京大学
网友评论