python筆記56-re正則匹配re.match


前言

re.match 嘗試從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。
re.search 掃描整個字符串並返回第一個成功的匹配。

re.match

re.match 嘗試從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。

使用語法:

re.match(pattern, string, flags=0)

函數參數說明:

  • pattern 匹配的正則表達式
  • string 要匹配的字符串。
  • flags 標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。參見:正則表達式修飾符,可選標志

匹配成功re.match方法返回一個匹配的對象,否則返回None。
我們可以使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。

  • group(num=0) 匹配的整個表達式的字符串,group() 可以一次輸入多個組號,在這種情況下它將返回一個包含那些組所對應值的元組。
  • groups() 返回一個包含所有小組字符串的元組,從 1 到 所含的小組號。

match 使用示例

從起始位置開始匹配,沒匹配到返回None

import re

# 在起始位置匹配
r1 = re.match("hello", "hello world!")
# 不在起始位置匹配
r2 = re.match("world", "hello world!")
print(r1)
print(r2)

返回

import re

# 在起始位置匹配
r1 = re.match("hello", "hello world!")
# 不在起始位置匹配
r2 = re.match("world", "hello world!")
print(r1)
print(r2)

運行結果

<_sre.SRE_Match object; span=(0, 5), match='hello'>
None

使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。

import re
line = "Cats are smarter than dogs"

matchObj = re.match(r'(.*) are (.*?) .*', line, re.M|re.I)

if matchObj:
    print("matchObj.group() : ", matchObj.group())
    print("matchObj.group(1) : ", matchObj.group(1))
    print("matchObj.group(2) : ", matchObj.group(2))
else:
    print("No match!!")

運行結果

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

search 示例

先看第一個案例,找出下面文本中的blog地址

import re


# 取出 blog 地址
a = '作者-上海悠悠 QQ交流群:717225969 blog地址:https://www.cnblogs.com/yoyoketang/ 歡迎收藏'
res = re.search(r'blog地址:(.*?) 歡迎收藏', a)
print(res)  # 返回Match object
print(res.group(1))

# 打印內容
# <_sre.SRE_Match object; span=(24, 71), match='blog地址:https://www.cnblogs.com/yoyoketang/ 歡迎收藏'>
# https://www.cnblogs.com/yoyoketang/

如果匹配到返回一個Match object對象,用group(1)取出匹配的值。

如果沒匹配到返回的是None,調用group(1)方法會拋異常

import re


# 取出 blog 地址
a = '作者-上海悠悠 QQ交流群:717225969 blog地址:https://www.cnblogs.com/yoyoketang/ 歡迎收藏'
res = re.search(r'blog地址X:(.*?) 歡迎收藏', a)
print(res)  # 返回Match object
print(res.group(1))

會拋出異常

Traceback (most recent call last):
  File "D:/soft/git/web_git/case/a.py", line 29, in <module>
    print(res.group(1))
None
AttributeError: 'NoneType' object has no attribute 'group'

於是可以加個判斷再取值: result = res.group(1) if res else None

import re


# 取出 blog 地址
a = '作者-上海悠悠 QQ交流群:717225969 blog地址:https://www.cnblogs.com/yoyoketang/ 歡迎收藏'
res = re.search(r'blog地址:(.*?) 歡迎收藏', a)
print(res)  # 返回Match object
# 加個判斷,如果沒匹配到給None值
result = res.group(1) if res else None
print(result)

search教程參考這篇https://www.cnblogs.com/yoyoketang/p/14249008.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM