马春杰杰 Exit Reader Mode

在Python中使用正则表达式

正则表达式简介

默认情况下,正则表达式(Regex)会匹配尽量多的字符,除非使用?标记

  • 只能匹配一个字符的:
    符号 匹配
    . 任意1个字符
    [a-z] 任意1个小写字符
  • 数量限制符号:
    符号 匹配
    ? 匹配0-1次
    + 匹配1-n次
    * 匹配0-n次
    {3} 匹配3次
    {3,5} 匹配3-5次
  • 作为一个整体
    符号 匹配
    (asd)+ 整体匹配1-n次
    (ab cd) | 选择一个

常用的符号

符号 匹配
^ 匹配行首
$ 匹配行尾
. 匹配1个any字符
? 匹配0次或1次
? 匹配尽可能少的字符
* 匹配0次或多次
+ 匹配1次或多次
{n} 匹配n次
(?:) 匹配但不获取
[a-z] 匹配任意小写字母字符
[^a-z] 匹配除了小写字母any字符
[0-9] 匹配任意数字字符
(?!) 匹配不符合的

在Python中使用正则表达式

import re
 
txt = "policeman"    
 
pattern = "<a>.*?</a>"  # 匹配<a></a>标签(中途不能换行)
pattern = "<a>([\s\S]*?)</a>"  # 匹配<a></a>标签并获取中间的内容(中途可以换行)
pattern = "[0-9]+"  # 匹配一个或多个数字
pattern = "police(?:wo)?man" # 匹配policeman或policawoman
pattern = "do(es)??"  # 匹配do或does 如果能匹配do 就不匹配does
pattern = "^(?!.*?aaa).*$"  # 匹配不包含aaa的
pattern = "[125][0-2][0-9]{4}[4-7][0-9][0-5][0-9]" # 匹配学号
 
all = re.findall(pattern, xh) # 返回一个list类型的匹配列表
a = re.search(pattern, xh)
#  re.fullmatch(pattern, xh)  # 匹配时返回匹配对象,否则返回None
 
if a:
    a = a.group() #如果能全部匹配,返回全部匹配的结果,否则返回第一个()里的结果
 
print a
 
def middle(matched):
    value = matched.group('value')
    return value[1]
 
s = '{sad}{a}{s}{ddd}'
print(re.sub('(?P<value>\{.\})', middle, s))  # 将{.}替换成.

 

本文最后更新于2021年5月13日,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!