網站首頁 編程語言 正文
01、正則表達式
學習正則表達式操作字符串,re模塊是用C語言寫的沒匹配速度非常快,其中compile函數根據一個模式字符串和可選的標志參數生成一個正則表達式對象,該對象擁有一系列方法用于正則表大會匹配和替換,re模塊也提供了與這下方法功能完全一致的函數,這些函數適用一個模式字符串做為他們的第一個參數
re.macth方法:re.math 嘗試從字符串起始位置匹配,返回match對象,,否則返回None,適用group()獲取匹配成功的字符串
語法:re.match(pattern,string,flags)
參數描述pattern匹配的正則表達式string要匹配的字符串flags標志位,用于控制正則表達式的匹配方式:如:是否匹配大小寫,多行匹配
參數 | 描述 |
---|---|
pattern | 匹配的正則表達式 |
string | 要匹配的字符串 |
flags | 標志位,用于控制正則表達式的匹配方式:如:是否匹配大小寫,多行匹配 |
import re
str='Python is the best language in the world'
result= re.match('P',str)
print(type(result))#<class 're.Match'>
print(result.group())
標志位:如果使用多個標志位,使用|分割,如:re.I|re.M
修飾符 | 描述 |
---|---|
re.I | 適匹配對大小寫不敏感 |
re.L | 做本地化識別匹配 |
re.M | 多行匹配,影響^ 和$ |
re.S | 使.匹配包括換行在內的所有字符 |
re.U | 根據Unicode字符集解析字符,這個標志影響\w,\W ,\b,\B |
re.X | 該標識符通過給予你更靈活的格式以便于你將正則表達式寫得更易于理解。 |
import re
strData='Python is the best language in the world\
gslfjgldsjgls'
#result= re.match('p',strData,re.I|re.M)#第三個參數 忽略大小寫
#print(type(result))#<class 're.Match'>
#print(result.group())
res=re.match('(.*?)is(.*?)',strData,re.I)
print(res.group(1))
print(res.group(2))
常用匹配規則:
符號 | 匹配規則 |
---|---|
.(點) | 匹配任意1個字符除了換行符 |
[abc] | 匹配abc中任意一個 |
\d | 匹配一個數字0-9 |
\D | 匹配非數字 |
\s | 匹配空白 即空格 tab鍵 |
\S | 匹配非空格 |
\w | 匹配單詞字符 即a-z A-Z 0-9 _ |
\W | 匹配非單詞字符 |
匹配字符數量:
符號 | 匹配規則 |
---|---|
* | 匹配前一個字符出現0次或者無限次,即可有可無 |
+ | 匹配前一個字符出現1次或者無限次,即至少有1次 |
? | 匹配前一個字符出現1次或者0次,即要么有1次要么沒有 |
{m} | 匹配前一個字符出現m次 |
{m,} | 匹配前一個字符至少出現m次 |
{m,n} | 匹配前一個字符出現從m次到n次 |
1.1、限定匹配數量規則
import re
# * 匹配前一個字符出現0次或者無限次
res=re.match('[a-z][a-z]*','MyPython',re.I)
print(res.group())
# + 匹配前一個字符1次或者無限次 至少一次
res=re.match('[a-zA-Z]+[\w]*','mynAMEDCeisz848s_')
print(res.group())
# ? 匹配前一個字符0次或者1次
res=re.match('[a-zA-Z]+[\d]?','mkohjhjgu8jg8')
print(res.group())
# {min,max} 匹配前一個從min到max次 min max必須是非負整數
#{count}精確匹配次數 {count,}沒有限制
res=re.match('\d{4,}','46145')
if res:
print('匹配成功{}'.format(res.group()))
#匹配郵箱 格式:xxxxxx@163.com
res=re.match('[a-zA-Z0-9]{6,11}@163.com','318129549@163.com')
print(res.group())
1.2、原生字符串
# path="D:\\1_zhao_File\\1_MarkDown\MarkDown學習使用篇"
# print(path )
import re
#原生字符串 r
print(re.match(r'c:\\a.text','c:\\a.text').group())
#匹配開頭結尾
#^ 匹配字符串開頭
#$ 匹配字符串結尾
# res=re.match('^p.*','python is language')
res=re.match('^p[\w]{5}','python is language')
print(res.group())
res=re.match('[\w]{5,15}@[\w]{2,5}.com$','318129549@qq.com')
print(res.group())
1.3、分組匹配
# | 匹配左右任意一個表達式 從左往右
import re
res=re.match('[\w]*|100','100')
print(res.group())
# (ab)分組匹配 將括號中字符作為一個分組
res=re.match('([0-9]*)-(\d*)','123456-464651561')
print(res.group())
print(res.group(1))
print(res.group(2))
# \num 的使用
# htmlTag='<html><h1>Python核心編程</h1></html>'
# res1=re.match(r'<(.+)>(.+)>(.+)</\2></\1>',htmlTag)
# print(res1.group(1))
# 分組 別名的使用 (?P<名字>)
data='<div><h1>www.baidu.com</h1></div>'
res=re.match(r'<(?P<div>\w*)><(?P<h1>\w*)>(?P<data>.*)</\w*></\w*>',data)
print(res.group())
1.4、編譯函數compile
# re.compile 方法
'''
compile將正則表達式模式編譯成一個正則表達式對象
reg=re.compile(pattern)
result=reg.match(string)
等效于result=re.match(pattern,string)
使用re.compile和保持所產生的正則表達式對象重用效率更高
'''
import re
#compile 可以把字符串編譯成字節碼
#優點:在使用正則表達式進行match時,python會將字符串轉為正則表達式對象
# 而如果使用compile,只需要轉換一次即可,以后在使用模式對象的話無需重復轉換
data='1364'
pattern=re.compile('.*')
#使用pattern對象
res=pattern.match(data)
print(res.group())
#re.search方法
#search在全文中匹配一次,匹配到就返回
data='我愛我偉大的祖國,I love China,China is a great country'
rees=re.search('China',data)
print(rees)
print(rees.span())
print(rees.group())
# print(data[21])
#re.findall方法 匹配所有,返回一個列表,
data='華為牛逼是華人的驕傲'
# res =re.findall('華.',data)
# print(res)
pattern=re.compile('華.')
res=pattern.findall(data)
print(res)
# re.sub方法 實現目標搜索和替換
data1='Pythons是很受歡迎的編程語言'
pattern='[a-zA-Z]+' #字符集范圍 +代表 前導字符模式出現1從以上
res=re.sub(pattern,'C#',data1)
resn=re.subn(pattern,'C#',data1)
print(res)
print(resn)
#re.subn 完成目標的的搜索和替換 還返回被替換的數量,以元組的形式返回
#re.split 是新分割字符串
data='百度,騰訊,阿里,華為,360,字節跳動'
print(re.split(',',data))
1.5貪婪模式和非貪婪模式
'''
python 中默認是貪婪的,總是貪婪的匹配盡可能多的字符,非貪婪相反,總是嘗試匹配盡可能少的字符
在 ” * ? + {m,n}"后面加上 ? 使貪婪變成非貪婪
'''
#貪婪
import re
res=re.match('[\d]{6,9}','111222333')
print(res.group())
#非貪婪
res=re.match('[\d]{6,9}?','111222333')
print(res.group())
content='asdfbsdbdsabsd'
# pattern=re.compile('a.*b')# 貪婪
pattern=re.compile('a.*?b')#非貪婪
res=pattern.search(content)
print(res.group())
#0710-49
原文鏈接:https://blog.csdn.net/ZhaoSong_/article/details/126669413?502
相關推薦
- 2023-02-12 Pytorch建模過程中的DataLoader與Dataset示例詳解_python
- 2022-07-29 Golang學習之反射機制的用法詳解_Golang
- 2022-05-01 Python中的bytes類型用法及實例分享_python
- 2022-09-24 關于R語言包的升級與降級問題_R語言
- 2022-09-16 一文詳解Python中復合語句的用法_python
- 2022-10-20 Kotlin作用域函數應用詳細介紹_Android
- 2023-07-16 spring boot 定時任務
- 2022-04-28 Android?連接藍牙掃碼器無輸入框的實現_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支