正则表达式测试工具:http://tool.oschina.net/regex/
https://www.w3cschool.cn/tools/index?name=reg
常用匹配规则
模式 | 描述 |
---|---|
+ | 匹配1个或多个表达式 |
* | 匹配0个或多个表达式 |
^ | 匹配一行字符串开头 |
$ | 匹配一行字符串结尾 |
. | 匹配任意字符 |
\d | 匹配任意数字 |
\s | 匹配任意空白符号 |
\w | 匹配字母、数字及下划线 |
{n} | 精确匹配n个前面的表达式 |
常用匹配方法
方法 | 描述 |
---|---|
match() | 从字符串开头开始,传入要匹配的正则表达式,检测是否有匹配字符串 |
search() | 依次扫描字符串,找到第一个符合的字符串 |
findall() | 搜索整个字符串,返回匹配的使用内容 |
sub() | 去除或修改一些字符串,让匹配更简单 |
compile() | 将正则字符串编译成表达式对象,方便复用 |
match() 方法
content = 'Hello 123 4567 World_This is a Regex Demo'
# 第一个参数为正则表达式,第二个为要匹配的字符串
result = re.match('^Hello\s(\d+)\s\d{4}\s\w{10}', content)
输出匹配的内容 ——group()
输出匹配的范围——span()
print(result)
print(result.group())
print(result.group(1)) # 子字符串匹配
print(result.span())
结果:
<re.Match object; span=(0, 25), match=‘Hello 123 4567 World_This’>
Hello 123 4567 World_This
123
(0, 25)
通用匹配
.* 表示匹配任意字符并无限次匹配
result1 = re.match('^Hello.*Demo$', content)
print(result1.group())
结果:
Hello 123 4567 World_This is a Regex Demo
贪婪匹配 | 非贪婪匹配 |
---|---|
.* | .*? |
尽可能匹配多的字符 | 尽可能匹配少的字符 |
字符串末尾 | 字符串中 |
修饰符
修饰符 | 描述 |
---|---|
re.I | 匹配不区分大小写 |
re.S | 使.匹配包括换行符在内的所有字符 |
使用
result = re.match(’^Hello\s(\d+)\s\d{4}\s\w{10}’, content, re.S)
转义匹配
在前面加\, 如\.
sub() 方法
import re
content = '5423dfjDJF:LJ'
# 第一个参数传入匹配值,第二个为替换成的字符串,第三个为原字符串
result = re.sub('\d+', '', content)
print(result)
结果:
dfjDJF:LJ
compile() 方法
import re
content1 = '2016-12-15 12:00'
content2 = '2019-4-23 12:00'
pattern = re.compile('\d{2}:\d{2}')
result1 = re.sub(pattern, '', content1)
result2 = re.sub(pattern, '', content2)
print(result1, result2)
结果:
2016-12-15 2019-4-23