常见正则表达式编写
python re库中常见函数
- search
# 返回满足匹配的第一个子串import restr = 'abc,cdn123'a = re.search('\d', str).group()print(a)
- match
# 返回满足匹配的第一个子串import restr = 'abc,cdn123'a = re.match('\d', str).group()print(a)
- findall
# 返回满足匹配的所有子串import restr = 'abc,cdn123'a = re.findall('\d', str) # a为列表print(a)
- group
# 提取分组截获的字符串(用括号包括的每个部分)import restr = 'abc,cdn123'a = re.search('([a-z]*),([a-z]*)', str).group(0)print(a) # abc.cdnb = re.search('([a-z]*),([a-z]*)', str).group(1)print(b) # abcc = re.search('([a-z]*),([a-z]*)', str).group(2)print(c) # cdn
- search与match只匹配一次就返回结果,而findall返回字符串所有匹配的子串
- match会从字符串第一个字符开始匹配,如果不匹配则返回空,而search从整个字符串寻找匹配项
正则表达式常见语法
| |
---|
模式 | 描述 |
^ | 匹配字符串的开头,开头不对就匹配不了 |
$ | 匹配字符串的结尾,结尾不对匹配不了 |
. | 任意字符除换行符 |
re* | 匹配0或多个的表达式 |
re+ | 匹配一个以上表达式 |
re{n} | 匹配n个前面的表达式 |
re{n,} | 匹配n个以上表达式 |
re{n,m} | 匹配n到m个前面的表达式的片段 |
a|b | 匹配a或b |
(re) | 匹配括号内的表达式 |
\d | 匹配数字 |
\D | 匹配除数字以外的字符 |
[abc] | 匹配abc |
[^abc] | 匹配除abc |
[a-z] | 匹配小写字母 |
[A-Z] | 匹配大写字母 |
[0-9] | 匹配数字 |
xxx(?=pattern) | 匹配以pattern结尾的xxx |
xxx(?!pattern) | 匹配不以pattern结尾的xxx |
(?<=pattern)xxx | 匹配以pattern开头的xxx |
(?<!pattern)xxx | 匹配不以pattern开头的xxx |
常见正则表达式举例
- [^,]*(?=,) 第一个逗号前的内容
- (?<,)[^,] 最后一个逗号后的内容
- (?<=lng=)\d*.\d+ 匹配lng=123.456的浮点数部分
- [pP]ython 匹配python Python
- \d*.\d+ 浮点数
- \d+
- 写的时候按照以什么开始,以什么结束,再减去特例,注意慎用任意字符.
- 文本文件提取经纬度形式lng=123.456
import relngs = []lats = []with open('123.txt', 'r', encoding='utf-8') as file:for line in file.readlines():lng = re.findall('(?<=lng)\d*\d+', line)lat = re.findall('(?<=lat=)\d*\d+', line)if lng:lngs = lngs + tmpif lat:lats = lats + tmpprint(lngs)print(lats)