Python正則表達式(含正則表達式速查表)

1、正則表達式的優點

正則表達式能夠匹配只要你能描述出來的字符串,對於普通的文本中常用的一些關鍵詞,如果想匹配某種模式很適合用而不是通過普通的contains這種是否含有等匹配。

2、python正則表達式速查表


3、python正則表達式使用方法:

首先,導入python的re模塊

import re

# 將正則表達式編譯成Pattern對象
pattern = re.compile(r'因.+?入院')
# 使用Pattern匹配文本,獲得匹配結果,無法匹配時將返回None
notes = '
初步診斷: 1.慢性阻塞性肺病伴急性加重 2.肺部感染 3.冠心病 缺血性心肌病 心功能II級 4.高血壓病?
' match = pattern . match ( notes )
if match:
    # 使用Match獲得分組信息
    print match.group()

re.compile(strPattern[, flag]):

flag可選值有:

  • re.I(re.IGNORECASE): 忽略大小寫(括號內是完整寫法,下同)
  • re.M(MULTILINE): 多行模式,改變'^'和'$'的行爲(參見上圖)
  • re.S(DOTALL): 點任意匹配模式,改變'.'的行爲
  • re.L(LOCALE): 使預定字符類 \w \W \b \B \s \S 取決於當前區域設定
  • re.U(UNICODE): 使預定字符類 \w \W \b \B \s \S \d \D 取決於unicode定義的字符屬性
  • re.X(VERBOSE): 詳細模式。

Match

Match對象是一次匹配的結果,包含了很多關於此次匹配的信息,可以使用Match提供的可讀屬性或方法來獲取這些信息。

match屬性:

  • string: 匹配時使用的文本。
  • re: 匹配時使用的Pattern對象。
  • pos: 文本中正則表達式開始搜索的索引。值與Pattern.match()和Pattern.seach()方法的同名參數相同。
  • endpos: 文本中正則表達式結束搜索的索引。值與Pattern.match()和Pattern.seach()方法的同名參數相同。
  • lastindex: 最後一個被捕獲的分組在文本中的索引。如果沒有被捕獲的分組,將爲None。
  • lastgroup: 最後一個被捕獲的分組的別名。如果這個分組沒有別名或者沒有被捕獲的分組,將爲None。

方法:

  • group([group1, …]): 
    獲得一個或多個分組截獲的字符串;指定多個參數時將以元組形式返回。group1可以使用編號也可以使用別名;編號0代表整個匹配的子串;不填寫參數時,返回group(0);沒有截獲字符串的組返回None;截獲了多次的組返回最後一次截獲的子串。
  • groups([default]): 
    以元組形式返回全部分組截獲的字符串。相當於調用group(1,2,…last)。default表示沒有截獲字符串的組以這個值替代,默認爲None。
  • groupdict([default]): 
    返回以有別名的組的別名爲鍵、以該組截獲的子串爲值的字典,沒有別名的組不包含在內。default含義同上。
  • start([group]): 
    返回指定的組截獲的子串在string中的起始索引(子串第一個字符的索引)。group默認值爲0。
  • end([group]): 
    返回指定的組截獲的子串在string中的結束索引(子串最後一個字符的索引+1)。group默認值爲0。
  • span([group]): 
    返回(start(group), end(group))。
  • expand(template): 
    將匹配到的分組代入template中然後返回。template中可以使用\id或\g、\g引用分組,但不能使用編號0。\id與\g是等價的;但\10將被認爲是第10個分組,如果你想表達\1之後是字符'0',只能使用\g<1>0。

其中,findall是非常好用的,可以直接把匹配的內容以列表的形式返回,示例如下:







4、正則表達式練習地址:

這是一個神器地址,相當好用:http://regexr.com/