常见正则表达式编写

python re库中常见函数

  1. search
# 返回满足匹配的第一个子串import restr = 'abc,cdn123'a = re.search('\d', str).group()print(a)
  1. match
# 返回满足匹配的第一个子串import restr = 'abc,cdn123'a = re.match('\d', str).group()print(a)
  1. findall
# 返回满足匹配的所有子串import restr = 'abc,cdn123'a = re.findall('\d', str) # a为列表print(a)
  1. 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)