日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Python中正则表达式用法 重点格式以这个为准_首看_各种问题

發布時間:2023/11/28 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python中正则表达式用法 重点格式以这个为准_首看_各种问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

20210811

https://www.jb51.net/article/101258.htm
一.惰性模式的概念:

此模式和貪婪模式恰好相反,它盡可能少的匹配字符以滿足正則表達式即可,例如:

var str="axxyyzbdkb"; 
console.log(str.match(/a.*b/));

以上代碼是貪婪模式,于是能夠匹配整個字符串,下面將其修改成惰性匹配模式:

var str="axxyyzbdkb"; 
console.log(str.match(/a.*?b/));


只取組里面的內容

20210803

[\u4e00-\u9fa5]
匹配中文

20201211

import refname = '2020-01-14_endometriosis_2020-01-01_UTF8.txt'
with open(fname, "r", encoding = 'utf-8') as f:abstracts = f.read()str = abstracts
iList= re.findall(r"PMID: \d+ ",str)
print(len(iList)) # output: 6049,符合文檔中文獻的總篇數iList= re.findall(r"PMID: \d+",str) # regex pattern中少一個空格
print(len(iList)) # output: 6050,結果比文檔中文獻總篇數多了一篇

統計字符串中元素的個數

20201124

中文輸入法下的括號 在正則下不需要轉義


豎線不需要轉義


小括號匹配需要加中括號

Python中正則表達式基礎知識

一、正則表達式

  1.使用正則表達式的動機

    1. 文本處理已經成為計算機常見工作之一

    2. 對文本內容的搜索,定位,提取是邏輯比較復雜的工作

3. 為了快速方便的解決上述問題,產生了正則表達式技術 2.定義: 即文本的高級匹配模式,提供搜索,替換等功能。其本質是由一系列字符和特殊符號構成的字串,這個字串即正則表達式。 3.原理: 通過普通字符和有特定含義的字符,來組成字符串,用以描述一定的字符串規則,比如:重復,位置等,來表達某類特定的字符串,進而匹配。 4.元字符使用: 1.普通字符--------匹配規則:每個普通字符匹配其對應的字符 e.g. In : re.findall('ab',"abcdefabcd") Out: ['ab', 'ab'] 注意:正則表達式在python中也可以匹配中文 2.或關系(|) 元字符: | 匹配規則: 匹配 | 兩側任意的正則表達式即可 e.g. In : re.findall('com|cn',"www.baidu.com/www.tmooc.cn") Out: ['com', 'cn'] 3.匹配單個字符 元字符: . 匹配規則:匹配除換行外的任意一個字符 e.g. In : re.findall('張.豐',"張三豐,張四豐,張五豐") Out: ['張三豐', '張四豐', '張五豐'] 4.匹配字符集 元字符: [字符集] 匹配規則: 匹配字符集中的任意一個字符 表達形式: [abc#!好] 表示 [] 中的任意一個字符 [0-9],[a-z],[A-Z] 表示區間內的任意一個字符 [_#?0-9a-z] 混合書寫,一般區間表達寫在后面 e.g. In : re.findall('[aeiou]',"How are you!") Out: ['o', 'a', 'e', 'o', 'u'] 5.匹配字符集反集 元字符:[^字符集] 匹配規則:匹配除了字符集以外的任意一個字符 e.g. In : re.findall('[^0-9]',"Use 007 port") Out: ['U', 's', 'e', ' ', ' ', 'p', 'o', 'r', 't'] 6.匹配字符串開始位置 元字符: ^ 匹配規則:匹配目標字符串的開頭位置 e.g. In : re.findall('^Jame',"Jame,hello") Out: ['Jame'] 7.匹配字符串的結束位置 元字符: $ 匹配規則: 匹配目標字符串的結尾位置 e.g. In : re.findall('Jame$',"Hi,Jame") Out: ['Jame'] 規則技巧: ^ 和 $必然出現在正則表達式的開頭和結尾處。如果兩則同時出現,則中間的部分必須匹配整個目標字符串的全部內容------絕對匹配。 8.匹配字符重復 元字符: * 匹配規則:匹配前面的字符出現0次或多次 e.g. In : re.findall('wo*',"wooooo~~w!") Out: ['wooooo', 'w'] 元字符:+ 匹配規則: 匹配前面的字符出現1次或多次 e.g. In : re.findall('[A-Z][a-z]+',"Hello World") Out: ['Hello', 'World'] 元字符:? 匹配規則: 匹配前面的字符出現0次或1次 e.g. 匹配整數 In [28]: re.findall('-?[0-9]+',"Jame,age:18, -26") Out[28]: ['18', '-26'] 元字符:{n} 匹配規則: 匹配前面的字符出現n次 e.g. 匹配手機號碼 In : re.findall('1[0-9]{10}',"Jame:13886495728") Out: ['13886495728'] 元字符:{m,n} 匹配規則: 匹配前面的字符出現m-n次 e.g. 匹配qq號 In : re.findall('[1-9][0-9]{5,10}',"Baron:1259296994") Out: ['1259296994'] 9.匹配任意(非)數字字符 元字符: \d \D 匹配規則:\d 匹配任意數字字符,\D 匹配任意非數字字符 e.g. 匹配端口 In : re.findall('\d{1,5}',"Mysql: 3306, http:80") Out: ['3306', '80'] 10.匹配任意(非)普通字符 元字符: \w \W 匹配規則: \w 匹配普通字符,\W 匹配非普通字符 說明: 普通字符指數字,字母,下劃線,漢字。 e.g. In : re.findall('\w+',"server_port = 8888") Out: ['server_port', '8888'] 11.匹配任意(非)空字符 元字符: \s \S 匹配規則: \s 匹配空字符,\S 匹配非空字符 說明:空字符指 空格 \r \n \t \v \f 字符 e.g. In : re.findall('\w+\s+\w+',"hello world") Out: ['hello world'] 12.匹配開頭結尾位置 元字符: \A \Z 匹配規則: \A 表示開頭位置,\Z 表示結尾位置 13.匹配(非)單詞的邊界位置 元字符: \b \B 匹配規則: \b 表示單詞邊界,\B 表示非單詞邊界 說明:單詞邊界指數字字母(漢字)下劃線與其他字符的交界位置。 e.g. In : re.findall(r'\bis\b',"This is a test.") Out: ['is'] 5.對元字符分類: 6.正則表達式的轉義 1.如果使用正則表達式匹配特殊字符則需要加 \ 表示轉義。 特殊字符: . * + ? ^ $ [] () {} | \ e.g. 匹配特殊字符 . 時使用 \. 表示本身含義 In : re.findall('-?\d+\.?\d*',"123,-123,1.23,-1.23") Out: ['123', '-123', '1.23', '-1.23'] 2. 在編程語言中,常使用原生字符串書寫正則表達式避免多重轉義的麻煩。 (在這里,正則表達式需要轉義,書寫成python字符串格式也需要轉義,因此雙重轉義,為避免混亂,對python層面的轉義用原生字符串書寫)
python字符串 -------------> 正則 --------> 目標字符串 "\\$\\d+"    解析為  \$\d+ ? 匹配 ? ? ? "$100" "\\$\\d+"    ?? 等同于   r"\$\d+" 7.貪婪模式和非貪婪模式 1. 定義 貪婪模式: 默認情況下,匹配重復的元字符總是盡可能多的向后匹配內容。比如: * + ? {m,n} 非貪婪模式(懶惰模式): 讓匹配重復的元字符盡可能少的向后匹配內容。 注:兩者的前提是正則表達式條件必須整體滿足時,才能談貪婪和非貪婪 2. 貪婪模式轉換為非貪婪模式 在匹配重復元字符后加 '?' 號即可 * : *? + : +? ? : ?? {m,n} : {m,n}?2019/4/25 RE e.g. In : re.findall(r'\(.+?\)',"(abcd)efgh(higk)") Out: ['(abcd)', '(higk)'] 8.正則表達式分組 1. 定義 在正則表達式中,以()建立正則表達式的內部分組,子組是正則表達式的一部分,可以作為內部整體操作對象。 2. 作用 1.可以被作為整體操作,改變元字符的操作對象 e.g. 改變 +號 重復的對象 In : re.search(r'(ab)+',"ababababab").group() Out: 'ababababab' e.g. 改變 |號 操作對象 In : re.search(r'(王|李)\w{1,3}',"王者榮耀").group() Out: '王者榮耀' 2.可以通過編程語言某些接口獲取匹配內容中,子組對應的內容部分 e.g. 獲取url協議類型 re.search(r'(https|http|ftp|file)://\S+',"https://www.baidu.com").group(1) 3. 捕獲組 可以給正則表達式的子組起一個名字,表達該子組的意義。這種有名稱的子組即為捕獲組。 格式: (?Ppattern) e.g. 給子組命名為 "pig" In : re.search(r'(?Pab)+',"ababababab").group('pig') Out: 'ab' 4. 注意事項 一個正則表達式中可以包含多個子組 子組可以嵌套,但是不要重疊或者嵌套結構復雜 子組序列號一般從外到內,從左到右計數(如下圖,序號表示先后順序) 9.正則表達式匹配原則 1. 正確性,能夠正確的匹配出目標字符串. 2. 排他性,除了目標字符串之外盡可能少的匹配其他內容. 3. 全面性,盡可能考慮到目標字符串的所有情況,不遺漏. 二、Python中 re模塊使用 1.re模塊相關函數: regex = compile(pattern,flags = 0) 功能: 生產正則表達式對象 參數: pattern 正則表達式 flags 功能標志位,擴展正則表達式的匹配 返回值: 正則表達式對象 re.findall(pattern,string,flags = 0) 功能: 根據正則表達式匹配目標字符串內容 參數: pattern 正則表達式 string 目標字符串 flags 功能標志位,擴展正則表達式的匹配 返回值: 匹配到的內容列表,如果正則表達式有子組則只能獲取到子組對應的內容 regex.findall(string,pos,endpos) 功能: 根據正則表達式匹配目標字符串內容 參數: string 目標字符串 pos 截取目標字符串的開始匹配位置 endpos 截取目標字符串的結束匹配位置 返回值: 匹配到的內容列表,如果正則表達式有子組則只能獲取到子組對應的內容 ![在這里插入圖片描述](https://img-blog.csdnimg.cn/2020112414205046.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t5bGUxMzE0NjA4,size_16,color_FFFFFF,t_70#pic_center) re.split(pattern,string,flags = 0)       功能: 使用正則表達式匹配內容,切割目標字符串       參數: pattern 正則表達式       string 目標字符串       flags 功能標志位,擴展正則表達式的匹配       返回值: 切割后的內容列表 ![在這里插入圖片描述](https://img-blog.csdnimg.cn/20201124142111729.png#pic_center) re.sub(pattern,replace,string,max,flags = 0)       功能: 使用一個字符串替換正則表達式匹配到的內容       參數: pattern 正則表達式       replace 替換的字符串       string 目標字符串       max 最多替換幾處,默認替換全部       flags 功能標志位,擴展正則表達式的匹配       返回值: 替換后的字符串


re.subn(pattern,replace,string,max,flags = 0)
      功能: 使用一個字符串替換正則表達式匹配到的內容
      參數: pattern 正則表達式
      replace 替換的字符串
      string 目標字符串
      max 最多替換幾處,默認替換全部
      flags 功能標志位,擴展正則表達式的匹配
      返回值: 替換后的字符串和替換了幾處

re.finditer(pattern,string,flags = 0)
      功能: 根據正則表達式匹配目標字符串內容
      參數: pattern 正則表達式
      string 目標字符串
      flags 功能標志位,擴展正則表達式的匹配
      返回值: 匹配結果的迭代器(迭代器用一個取一個,節省內存資源)

re.fullmatch(pattern,string,flags=0)
      功能:完全匹配某個目標字符串
      參數:pattern 正則
      string 目標字符串
      返回值:匹配內容match object
      注:該函數可用于密碼驗證:密碼只允許字母和數字,如果返回值為None,則密碼不符合規范,含有數字和字母以外的字符



re.match(pattern,string,flags=0)
      功能:匹配某個目標字符串開始位置
      參數:pattern 正則
      string 目標字符串
      返回值:匹配內容match object

re.search(pattern,string,flags=0)
      功能:匹配目標字符串第一個符合內容
      參數:pattern 正則
      string 目標字符串
      返回值:匹配內容match object

compile對象屬性
      【1】 flags : flags值--------注:不要跟參數flags混淆了
      【2】 pattern : 正則表達式
      【3】 groups : 子組數量
      【4】 groupindex : 捕獲組名與組序號的字典

2.match對象的屬性方法
    
    1. 屬性變量
      pos 匹配的目標字符串開始位置
      endpos 匹配的目標字符串結束位置
      re 正則表達式
      string 目標字符串
      lastgroup 最后一組的名稱
      lastindex 最后一組的序號

 2. 屬性方法
      span() 獲取匹配內容的起止位置
      start() 獲取匹配內容的開始位置
      end() 獲取匹配內容的結束位置
      groupdict() 獲取捕獲組字典,組名為鍵,對應內容為值
      groups() 獲取子組對應內容
      group(n = 0)
        功能:獲取match對象匹配內容
        參數:默認為0表示獲取整個match對象內容,如果是序列號或者組名則表示獲取對應子組內容
        返回值:匹配字符串

3.flags參數
    
    1. 使用函數:re模塊調用的匹配函數。如:re.compile,re.findall,re.search…

2.作用:擴展豐富正則表達式的匹配功能
    
    3.常用flag
      A == ASCII 元字符只能匹配ascii碼

 I == IGNORECASE 匹配忽略字母大小寫

 S == DOTALL 使 . 可以匹配換行


M == MULTILINE 使 ^ $可以匹配每一行的開頭結尾位置


X == VERBOSE 為正則添加注釋


4. 使用多個flag
      方法:使用按位或連接
        e.g. : flags = re.I | re.A

代碼實例:


總結

以上是生活随笔為你收集整理的Python中正则表达式用法 重点格式以这个为准_首看_各种问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。