正则表达式-re¶
根据一些规则匹配自己想要的结果
比如:javascript:topage(11) 提取字符串中的数字
匹配单个字符¶
正则表达式语法 | 含义 |
---|---|
. | 匹配开头任意1个字符(除了\n) |
[ ] | 匹配[ ]中开头列举的字符 |
\d | 匹配开头数字,即0-9 |
\D | 匹配开头非数字,即不是数字 |
\s | 匹配开头空白,即 空格,tab键 |
\S | 匹配开头非空白 |
\w | 匹配开头非特殊字符,即a-z、A-Z、0-9、_、汉字 |
\W | 匹配开头特殊字符,即非字母、非数字、非汉字 |
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) | 针对正则表达式 pattern 在 string 里的所有非重叠匹配返回一个产生 Match 对象的 iterator。 string 将被从左至右地扫描,并且匹配也将按被找到的顺序返回。 空匹配也会被包括在结果中。 |
findall(pattern, string, flags=0) | 返回 pattern 在 string 中的所有非重叠匹配,以字符串列表或字符串元组列表的形式。对 string 的扫描从左至右,匹配结果按照找到的顺序返回。 空匹配也包括在结果中。 |
group()
方法用于返回匹配的字符串。它可以接受一个或多个参数,具体取决于正则表达式中是否使用了分组。
groups()
方法返回一个包含所有分组匹配结果的元组。它不接受任何参数。
groupdict()
方法返回一个包含所有命名分组匹配结果的字典。它不接受任何参数。