python正则表达式

部署运行你感兴趣的模型镜像

一,常用的表达式及用法

表达式含义
\d数字
\D非数字
\w字母数字下划线
\s空白符包括换行符
\S非空白符不包括换行符
.任意字符不包括换行符
[ ]枚举匹配括号中的字符
[^]枚举取反,匹配括号中除外
*子表达式零次或多次
^匹配字符串的开头
+子表达式一次或多次
?子表达式零次或一次,或指一个非贪婪限定符
\转义
$匹配字符的结尾
{n,m},{n},{m}匹配前面子表达式至少n次,至多m次
|
()分组
(?:)非捕获组
abc1(?=abc2)匹配abc2前面的abc1
(?<=abc2)abc1匹配abc2前面的abc1
abc1(?!abc2)匹配后面不是abc2的abc1
(?<!abc2)abc1匹配前面不是abc2的abc1

?子表达式零次或一次

import re
a = 'banan'
b = 'banaon'

for i in [a, b]:
    regex = re.search(r'banao?n',i)
    if regex:
        print(regex.group())
    else:
        print("未收到")
#banan
#banaon

枚举[ ]
枚举取反[^ ]

import re
text  = '123454165848-45415]'
a = re.search(r'[0-9-\]]+',text)
print(a.group())

text2 = '沉舟侧畔千帆过,病树前头万木春'
a2 = re.search(r'[\u4e00-\u9fa5,]+',text2)
print(a2.group())

text3 = '123456asfbfajhsf1254465'
a3 = re.search(r'[^0-9]+',text3)
print(a3.group())

贪婪非贪婪,+与*

import re

text = '去公园,去动物园,去游乐园'
a = re.search(r'去.*?园',text)
print(a.group())


text2  ='饼干好吃'
text3  ='饼干    好吃'
for i in [text2,text3]:
    regex = re.search(r'饼干\s*好吃',i)#此处只能*
    if regex:
        print(regex.group())
    else:
        print('未找到')#```#```

非捕获组:(?😃

import re
text ='abcd123456'
a = re.search(r'(?:abcd)|(123456)',text)
print(a.group())#(?:后的是不需要的)

(?<=)
(?<!abc2)abc1

import re
text_list = [
    '小王去玩游戏',
    '小明去玩游戏',
    '小张去玩游戏',
    '小杰去玩游戏',
]#不让小杰去玩游戏
for text in text_list:
    regex = re.search(r'(?<!小杰)去玩游戏',text)
    if regex:
        print(regex.group())
    else:
        print(f'没匹配到:{text}')#输出为没匹配到小杰去玩游戏

?!是不匹配 ?=是要匹配

import re
text_list = [
    '152@aa.dom',
    '152@bb.dom',
    '152@cc.dom',
]
for text in text_list:
    regex = re.search(r'\d*@(?=cc).*?$',text)
    if regex:
        print(regex.group())#152@cc.dom

二,常用floag方法re方法

subn替换,会返回一个元组
sub:替换

import re
text1 = "12345k"
b = re.sub(r'\d*','a',text1)
c = re.subn(r'\d*','a',text1)
print(b)#aaka
print(c)#('aaka', 3)

split:拆分

import re
a = "沉舟侧畔:千帆过,病树前头:万木春."
text = re.split('[,:]',a)
print(text)

match:匹配开头从开头开始匹配
fullmatch:全文匹配,
match相当于search前面加上^,
fullmatch相当于search前面^,后面加上$

import re
text1 = "123456789123456aaa"
a = re.compile(r'\d*')

result = a.match(text1)
print(result.group())#123456789123456

result2 = a.fullmatch(text1)
print(result2)#None

result3 = re.search(r'^\d*$',text1)
print(result3)#None

I:忽略大小写
X:添加注释
search:出现的匹配
S:忽略换行符
M:拆分行,多行匹配,影响^$

import re
a = "蜀道之难难于上青天A123456789\n沉舟侧畔千帆过a123456789\n"
end = re.search(r'.*',a,re.S)
print(end.group())
#蜀道之难难于上青天A123456789     没有S只会取到换行符
#沉舟侧畔千帆过a123456789

findall:找所有
M:拆分行,多行匹配,影响^$

import re
a = "蜀道之难难于上青天A123456789\n沉舟侧畔千帆过a123456789\n"
end = re.findall(r'.*',a,re.M)
print(end)#['蜀道之难难于上青天A123456789', '', '沉舟侧畔千帆过a123456789', '', '']
import re
text= 'xxxxxxxxxxxxxxxxxx'
a = re.findall(r'xxx',text,re.S)
print(a)#查找xxx在text中出现的次数

finditer:

import re\
text= 'xxxxxxxxxxxxxxxxxx'
a = re.finditer(r'xxx',text,re.S)
for i in a:
print(i.group())

重叠匹配
只能向前进行操作

import re
import regex as re
a = 'textextext'
b = re.findall(r'text',a,overlapped= True)
print(b)
print(len(b))#输出为['text',text]2

回溯
相同的结果,性能有差异,回溯可能会出现响应越来越慢,停止运行到后面。

import re
a = 'cccccd'
regex = re.compile(r'c+d')
regex2 = re.compile(r'c.*cd')
print('1',regex.search(a).group())#0次回溯
print('2',regex2.search(a).group())#1次回溯

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值