正则表达式
认识正则:,又称规则表达式,
import re
re.math(pattern, string, flags)
描述 | |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags |
-
- 实例
import re
# 在www.baidu.com这个字符串里面匹配www
re.match(r'www', 'www.baidu.com') # 在起始位置匹配
re.match(r'com', 'www.baidu.com') # 不在起始位置匹配
# 返回的结果
>>>(0,3)
>>>None
# re.search 扫描整个字符串并返回第一个成功的匹配。
# 函数语法:
re.search(pattern, string, flags=0)
说明 | |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags |
-
匹配成功search方法返回一个匹配的对象,否则返回None。
-
我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式
- 实例
import re
re.search('www', 'www.baidu.com').span() # 在起始位置匹配
re.search('com', 'www.baidu.com').span() # 不在起始位置匹配
# 返回结果
>>>(0,3)
>>>(10,13)
# 语法函数
re.findall(pattern, string, flags=0)
import re
result1 = re.findall(r'\d+','runoob 123 google 456')
pattern = re.compile(r'\d+') # 查找数字
result2 = pattern.findall('runoob 123 google 456')
result3 = pattern.findall('run88oob123google456', 0, 10)
print(result1)
print(result2)
print(result3)
# 返回结果
>>>["123","456"]
>>>["123","456"]
>>>["88","12"]
import re
result = re.findall(r'(\w+)=(\d+)', 'set width=20 and height=10')
print(result)
# 返回结果
>>>[('width', '20'), ('height', '10')]
语法格式
re.compile(pattern, flags)
import re
pattern = re.compile(r'\d+')
data = pattern.match('123abc').group()
re1 = re.split(r"分割符",maxsplit=1)
var1 = "你好|我是|张三|喜欢篮球"
re1 = re.split(r"\|",var1,maxsplit=2)
print(re1)
re.sub(r"匹配内容","替换内容",字符串,count=0)
var1 = "你好,我是张三,喜欢篮球"
re1 = re.sub(r"张三", "阿坤",var1)
print(re1)
描述 | |
---|---|
re.I | 使匹配对大小写不敏感 |
re.L | 做本地识别化匹配 |
re.M | 多行匹配,影响^和$ |
re.S | 使.匹配,包括换行在内的所有字符 |
re.U | 根据unicode字符集解析字符,这个标志会影响\w,\W\b,\B |
re.A |
描述 | |
---|---|
. | 小数点可以匹配除了换行符\n以外的任意字符,只能匹配一个 |
| | 逻辑操作符-或 |
[abc] | 匹配字符集所包含的任意一个字符。 |
[^abc] | 匹配未包含的任意字符。 |
[a-z] | 字符范围。匹配指定范围内的任意字符。 |
\ | 将紧跟后面的字符进行转义。 |
() |
import re
r1 = re.match(r'张三', '张三是法外狂徒').group()
r2 = re.match(r"张三","法外狂徒张三")
r3 = re.match(r"a...c","a和和和cde")
r4 = re.match(r"d|a","abc")
# r5 = re.search(r"[bc]","apple and banana")
r5 = re.search(r"叶问[123]","叶问2")
r6 = re.findall(r"[^abc]","apple and banana")
描述 | |
---|---|
\n | 匹配一个换行符。 |
\r | 匹配一个回车符。 |
\t | 匹配一个制表符。 |
\\ | 匹配一个斜杠 |
\^ | 匹配^符号 |
\$ | 匹配$符号 |
\. |
import re
r1 = re.search(r"\.","aa.b")
r2 = re.search(r"\$","我的资产100000$")
r3 = re.search(r"\\","大家好\我是张三")
r4 = re.search(r"\^","你好^呀")
r5 = re.search(r"\\n","大家好\\n我是张三")
描述 | |
---|---|
\d | 匹配一个数字字符。等价于 [0-9]。 |
\w | 匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。 |
\s | 匹配空白字符 |
\D | 匹配一个非数字字符。等价于 [^0-9】。 |
\W | 匹配非字母、数字、下划线。等价于 'A-Za-z0-9_'。 |
\S |
- 操作系统和你的应用环境而定。
import re
r1 = re.findall(r"\d","快来数一数,24678")
r2 = re.findall(r"\s","大家好\r我\t是 张三")
r3 = re.findall(r"\w","大家好,wosho 1234_ _ _",re.A)
# r3 = re.findall(r"[a-zA-Z0-9_]","大家好,wosho 1234_ _ _")
r4 = re.findall(r"\D","快来数一数,24678")
r5 = re.findall(r"\S","大家好\r我\t是 张三")
r6 = re.findall(r"\W","大家好,wosho 1234_ _ _",re.A)
print(r6)
描述 | |
---|---|
* | 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。 |
+ | 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。 |
? | 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 。? 等价于 {0,1}。 |
{n} | n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。 |
{n,} | n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。 |
{n,m} |
import re
r1 = re.match(r"\d{3}", "1234").group()
# r1 = re.match(r"13\d{9}|15\d{9}|17\d{9}|18\d{9}","13512344321")
# r1 = re.match(r"1[3578]\d{9}","13345678911")
r2 = re.match(r"\d{3,4}-\d{7,8}", "123-44567890")
r3 = re.match(r"\d{3,}-\d{7,}", "123-4456781290")
# r4 = re.match(r"\d{0,1}", "1234")
r4 = re.match(r"\d?","12345")
r5 = re.match(r"\d*","123456789")
字符 | 描述 |
---|---|
^ | 匹配输入字符串的开始位置。 |
$ |
import re
r1 = re.match(r"^abc$","abc")
import re
html_data = """
<ul>
<li>宝马</li>
<li>奔驰</li>
<li>奥迪</li>
<li>大众</li>
</ul>
"""
r1 = re.search(r"<li>(.*)</li>", html_data).group()
print(r1)