导入re模块
import re
使用match方法进行匹配操作
result = re.match(正则表达式,要匹配的字符串)
如果上一步匹配到数据的话,可以使用group方法来提取数据
result.group()
import re
result = re.match("[hH]el", 'hello xiaobai')
print(result.group())
参数 |
含义 |
. |
匹配任意1个字符(除了\n) |
[] |
匹配[]中列举的字符串 |
\d |
匹配数字,即0-9 |
\D |
匹配非数字,即不是数字 |
\s |
匹配空白,即空格、tab键(用的比较少) |
\S |
匹配非空白 |
\w |
匹配单词字符,即a-z、A-Z、0-9、_、中文字符(慎用这个) |
\W |
匹配非单词字符 |
参数 |
含义 |
* |
匹配前一个字符出现0次或无限次,即可有可无 |
+ |
匹配前一个字符出现1次或无限次,即至少有1次 |
? |
匹配前一个字符出现0次或1次,即至多1次 |
{m} |
匹配前一个字符出现m次 |
{m,n} |
匹配前一个字符出现m-n次 |
参数 |
含义 |
^ |
匹配字符串开头 |
$ |
匹配字符串结尾 |
print(re.match(r".*a$", "dsa")) # 以a结尾
print(re.match(r"^a.*", "as")) # 以a开头
参数 |
含义 |
| |
匹配左右任意一个表达式 |
() |
将()中字符作为一个分组 |
\num |
引用分组num匹配到的字符串 |
(?P<name>) |
分组起别名 (了解) |
(?P=name) |
引用别名为name分组匹配到的字符串(了解) |
result = re.match(r"a(111|222)b", "a111b") # a b 中间是111或222
print(result.group()) # a111b
print(result.group(1)) # 111
result = re.match(r"(a)(111|222)b", "a111b")
print(result.group(1)) # a
print(re.match(r"[1-9]?\d$", "0"))
# \1 表示取出第一个分组的匹配结果
print(re.match(r"<(\w*)>.*</\1>", "<h1>hahhaah</h1>")) # 前后都是h1
print(re.match(r"<(\w*)><(\w*)>.*</\2></\1>", "<body><h1>hahhaah</h1></body>"))
print(re.match(r"<(?P<first>\w*)>.*</(?P=first)>", "<h1>hahhaah</h1>"))
- search
search不会从头匹配,只要匹配到符合要求的数据的地方 就匹配到了
ret = re.search(r"\d+", "阅读次数为 998 333")
print(ret.group()) # 998
- findall
ret = re.findall(r"\d+", "python = 9999, c = 3432, c++ = 23344")
print(ret) # ['9999', '3432', '23344']
- sub
将匹配到的数据进行替换
#方法一
ret = re.sub(r"\d+", "998", "python = 888")
print(ret) # python = 998
# 方法二
def add(temp):
strNum = temp.group()
num = int(strNum) + 1
return str(num)
ret = re.sub(r"\d+", add, "python = 777")
print(ret) # python = 778
- splite
根据匹配进行切割字符串,并返回一个列表
ret = re.split(r":| ", "info:xiaoli 22 shandong")
print(ret) # ['info', 'xiaoli', '22', 'shandong']
网友评论