Python(五、正则表达式)

正则表达式

"""
import re
result = re.match("正则表达式", "要匹配的字符串")
# 如果上一步匹配数据成功,可以使用group方法来获取数据
result.group()
"""

# from gevent import monkey
# import gevent
# monkey.patch_all()

import re

# 匹配单个字符
result = re.match("速度与激情[1-36-8]", "速度与激情1111")  # 此时1-3  6-8符合
# 当不匹配的时候,则返回值result就是None
print(result.group())  # 速度与激情1  获取的是匹配的部分

result = re.match("速度与激情[a-d1-9]", "速度与激情ab1")
print(result.group())  # 速度与激情a

"""
.  匹配任意一个字符(除了\n)
[]  匹配[]列举的字符
\d  匹配一个数字 即0-9
\D  匹配非数字
\s  匹配空白 即空格 tab键
\S  匹配非空白
\w  匹配单词字符 即a-z A-Z  0-9 还有下划线
\W  匹配非单词字符

"""

# 匹配多个字符
result = re.match("速度与激情\d{1,3}", "速度与激情12")  # 匹配一个到3个数字
print(result.group())  # 速度与激情12

result = re.match("速度与激情\d{2}", "速度与激情12")  # 必须匹配2个数字
print(result.group())  # 速度与激情12

result = re.match("速度与激情a{2}", "速度与激情aa")
print(result.group())  # 速度与激情aa

# ?代表前面最近的字符可以有一个或者没有
result = re.match(r"速度与激情-?\d{2}", "速度与激情11")
print(result.group())  # 速度与激情11

"""
*  匹配前一个字符出现0次或者无限次,即可有可无
+  匹配前一个字符出现1次或者无限次,即至少1次
?  匹配前一个字符1次或者0次
{m} 匹配前一个字符出现m次
{m,n} 匹配前一个字符出现m次到次

遇到特殊符号需要匹配的时候,在前面添加一个\进行转义即可
"""

"""
A|B可以匹配A或B,所以(P|p)ython可以匹配'Python'或者'python'
^表示行的开头,^\d表示必须以数字开头
$表示行的结束,\d$表示必须以数字结束
(ab)将括号中字符作为一个分组
\num 引用分组num匹配到字符串
(?P) 分组起别名
(?P=name) 引用别名为name分组匹配到字符串
"""
# 分组
result = re.match(r"([a-zA-Z0-9]{4,20})(@163|126)\.com$", "[email protected]")
r = result.group()
print(r)  # [email protected]
# 下面两个其实针对的是正则表达式中() group(1)就会找到正则中第一个()包括的内容,依次同理
print(result.group(1))  # laowang
print(result.group(2))  # @163

# search(不用从头匹配,此处区别于match)
ret = re.search(r"\d+", "阅读次数为  9999 再次阅读 111")
print(ret.group())  # 9999

# findall
ret = re.findall(r"\d+", "python=999   c=200")
# 注意此处是ret不是group
print(ret)  # ['999', '200']

# sub:将匹配的数据进行替换,而且sub支持第二个参数传入函数引用,只要返回值是字符串即可
ret = re.sub(r"\d+", '111', "python=999   c=200")
print(ret)  # python=111   c=111

# split:根据匹配进行切割字符串,并返回一个列表
ret = re.split(r":| ", "info:xiaoas 33 fnasf") #此时是按照冒号或者空格切割
print(ret)  # ['info', 'xiaoas', '33', 'fnasf']


你可能感兴趣的:(Python(五、正则表达式))