Skip to content

re官方文档
博客

正则表达式-re

根据一些规则匹配自己想要的结果

比如:javascript:topage(11) 提取字符串中的数字

匹配单个字符

正则表达式语法 含义
. 匹配开头任意1个字符(除了\n)
[ ] 匹配[ ]中开头列举的字符
\d 匹配开头数字,即0-9
\D 匹配开头非数字,即不是数字
\s 匹配开头空白,即 空格,tab键
\S 匹配开头非空白
\w 匹配开头非特殊字符,即a-z、A-Z、0-9、_、汉字
\W 匹配开头特殊字符,即非字母、非数字、非汉字

code

import re

# re.findall(r'\d+', big_page)[0]
# re.search()
# 1- .  匹配任意1个字符(除了\n)
result = re.match('.', 'a')
print(result.group())

re1 = re.match('wha.', 'what')
print(re1.group())

re2 = re.match('h.w', 'how')
print(re2.group())

# res2.group() 匹配不到会报错 AttributeError: 'NoneType' object has no attribute 'group'

# 2- [ ]    匹配[ ]中列举的字符
#
re3 = re.match('h', 'hello china')
print(re3.group())

re4 = re.match('H', 'Hello Python')
print(re4.group())

# 匹配开头是大小写都OK
re5 = re.match('[hH]', 'hello china')
print(re5.group())

re6 = re.match('[hH]', 'Hello china')
print(re6.group())

# 匹配开头 [0-9] [0123456789] \d
re7 = re.match('[0-9]', '0-python')
print(re7.group())

re8 = re.match("[0-35-9]Hello Python", "4Hello Python")
# print(re8.group())

# 3- \d 匹配数字,即 0-9
re9 = re.match('\d', '1javascript:topage(11)')
print(re9.group())

# 4- \D 匹配非数字,即不是数字
re10 = re.match('\D', 'javascript:topage(11)')
print(re10.group())

# 5- \s 匹配空白,即 空格,tab键
re11 = re.match('\s', ' aa ')
print(re11.group())

re11 = re.match('\s', '    aa ')
print(re11.group())

# 6- \S 匹配非空白
re11 = re.match('\S', 'aa ')
print(re11.group())

# 7- \w 匹配非特殊字符,即a-z、A-Z、0-9、_、汉字
data = ['123', 'abc', 'ABC', '中国']
for i in data:
    re12 = re.match('\w', i)
    print(re12.group())

# 8- \W 匹配特殊字符,即非字母、非数字、非汉字
data = ['!@@', '^^', '**', '&&']
for i in data:
    re12 = re.match('\W', i)
    print(re12.group())


a
what
how
h
H
h
H
0
1
j


a
1
a
A

!
^
*
&

匹配多个字符

正则表达式语法 含义
* 匹配前一个字符出现0次或者无限次,即可有可无
+ 匹配前一个字符出现1次或者无限次,即至少有1次
? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m} 匹配前一个字符出现m次
{m,n} 匹配前一个字符出现从m到n次

匹配开头和结尾

正则表达式语法 含义
^ 匹配字符串开头
$ 匹配字符串结尾

匹配分组

正则表达式语法 含义
| 匹配左右任意一个表达式
(ab) 将括号中字符作为一个分组
\num 引用分组num匹配到的字符串
(?P<name>) 分组起别名
(?P=name) 引用别名为name分组匹配到的字符串

re中的方法

方法 含义
re.match(pattern, string, flags=0) 如果 string 开头的零个或多个字符与正则表达式 pattern 匹配,则返回相应的 Match
re.search(pattern, string, flags=0) 扫描整个 string 查找正则表达式 pattern 产生匹配的第一个位置,并返回相应的 Match
re.finditer(pattern, string, flags=0) 针对正则表达式 patternstring 里的所有非重叠匹配返回一个产生 Match 对象的 iteratorstring 将被从左至右地扫描,并且匹配也将按被找到的顺序返回。 空匹配也会被包括在结果中。
findall(pattern, string, flags=0) 返回 patternstring 中的所有非重叠匹配,以字符串列表或字符串元组列表的形式。对 string 的扫描从左至右,匹配结果按照找到的顺序返回。 空匹配也包括在结果中。

group()方法用于返回匹配的字符串。它可以接受一个或多个参数,具体取决于正则表达式中是否使用了分组。

groups()方法返回一个包含所有分组匹配结果的元组。它不接受任何参数。

groupdict()方法返回一个包含所有命名分组匹配结果的字典。它不接受任何参数。