re模塊

re模塊

  • re模塊自己是用來操做正則表達式,與正則自己沒有關係python

  • 正則表達式是用來匹配處理字符串的 python 中使用正則表達式須要引入re模塊正則表達式

    如:函數

    import re #第一步,要引入re模塊工具

  • re.match(pattern表達式規則, string)測試

    • 從頭開始,等同於re.search加上^號
    • 若是不是起始位置匹配成功的話,match()就返回none.
    • 匹配成功re.match方法返回一個匹配的對象,不然返回None。
    import re
    print(re.match('www', 'www.runoob.com'))  # 在起始位置匹配
    print(re.match('com', 'www.runoob.com'))         # 不在起始位置不匹配
  • re.search("匹配規則", "要匹配的字符串")code

    • 匹配成功re.search方法返回一個匹配的對象,不然返回None。
    • 從頭至尾從頭匹配字符串中取出第一個符合條件的項.
    • re.match只匹配字符串的開始,若是字符串開始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個字符串,直到找到一個匹配。
    import re
    ret = re.serch('\d','alex83')
    print(ret)        
    if ret:
        print(ret.group())        #若是返回對象,用group取值
  • re.findall("匹配規則", "要匹配的字符串")對象

    • 在字符串中找到正則表達式所匹配的全部子串,並返回一個列表
    • 若是沒有找到匹配的,則返回空列表
  • re.finditer內存

    • 讀大文件使用finditer節省內存,結果比較多的時候使用
    • 返回值與findall相似
import re
ret = re.finditer('\d','asfjsdf12jidfiewjfi'*200000)      #ret是一個迭代器
for i in ret:                   #迭代出來的每一項都是一個對象
    print(i.group())         #經過group取值便可
  • re.compile 編譯方法rem

    • 在同一個正則表達式重複使用屢次的時候使用compile能減小使用時間開銷
    import re
    s= 'asfjsdf12jidfiewjfi'
    ret = re.compile('\d+')
    r1 = ret.seach('alex83')
    r2 = ret.findall('wusir73')
  • 擴展字符串

    import re
    # ret = re.search("<(?P<tag_name>\w+)>\w+</w+>","<h1>hello</h1>")
    # print(ret.group('tag_name'))
    # print(ret.group())
    ret = re.search("<(?P<tag_name1>\w+)>\w+</\w+>","<h1>hello</h1>")
    #還能夠在分組中利用?的形式給分組起名字
    #獲取的匹配結果能夠直接用group('名字') 拿到對應的值
    print(ret.group('tag_name1')) #結果 :h1
    print(ret.group()) #結果 :<h1>hello</h1>

1 re模塊分組

  • findall 遇到分組時,優先顯示分組中的內容

  • ?: 取消分組優先展現

    import re
    s1 = '1-2*(60+(-40.35/5)-(-4*3))'
    res=re.compile(r'\d+\.\d+?|(?:\d+)')
    ret=re.findall(res,s1)
    # ret.remove('')
    print(ret)
  • 分組編號

    s1 = '<h1>wahaha</h1>'
    s2 = '<a>wahaha ya wahaha</a>'
    import re
    
    ret = re.search('<(\w+)>(.*?)</\w+>',s1)
    print(ret)
    print(ret.group(0))   # group參數默認爲0表示取整個正則匹配的結果
    print(ret.group(1))   # 取第一個分組中的內容
    print(ret.group(2))   # 取第二個分組中的內容
  • 分組命名

    • (?P <名字> 正則表達式)

      s1 = '<h1>wahaha</h1>'
      s2 = '<a>wahaha ya wahaha</a>'
      ret = re.search('<(?P<tag>\w+)>.*?</(?P<tag2>\w+)>',s1)             #(?P<tag>)
      print(ret.group('tag'))
  • 引用分組

    • 引用分組 (?P=組名) 這個組中的內容必須徹底和以前已經存在的組匹配到的內容如出一轍
    s1 = '<h1>wahaha</h1>'
    s2 = '<a>wahaha ya wahaha</a>'
    ret = re.search('<(?P<tag>\w+)>.*?</(?P=tag)>',s1)                #(?P=tag)
    print(ret.group('tag'))
#經典例題
#有的時候咱們想匹配的內容包含在不相匹配的內容當中,這個時候只須要把不想匹配的先匹配出來,再經過手段去掉
import re
ret=re.findall(r"\d+\.\d+|(\d+)","1-2*(60+(-40.35/5)-(-4*3))")
print(ret)
ret.remove('')
print(ret)

2 flags

編譯標誌位,用於修改正則表達式的匹配方式,如:是否區分大小寫,多行匹配等。經常使用的flags有:

標誌 含義
re.S(DOTALL) 使.匹配包括換行在內的全部字符
re.I(IGNORECASE) 使匹配對大小寫不敏感
re.L(LOCALE) 作本地化識別(locale-aware)匹配,法語等img
re.M(MULTILINE) 多行匹配,影響^和$
re.X(VERBOSE) 該標誌經過給予更靈活的格式以便將正則表達式寫得更易於理解
re.U 根據Unicode字符集解析字符,這個標誌影響\w,\W,\b,\B
#示例
re.compile(pattern,flags=0)

pattern: 編譯時用的表達式字符串。

flags 編譯標誌位,用於修改正則表達式的匹配方式,如:是否區分大小寫,多行匹配等。

3 轉義符

  • r或者\爲轉義符
  • 正則表達式中的轉義符在python的字符串中也有轉義的做用
  • 全部的正則都已在工具中的測試結果爲結果,在全部結果前加r
  • \\n匹配\n===>r'\n'
  • \\\\n匹配\\n===>r'\\n'
相關文章
相關標籤/搜索