match(),向它傳入要匹配的字符串以及正則表達式,就能夠檢測這個正則表達式是否匹配字符串正則表達式
match()方法會嘗試從字符串的起始位置匹配正則表達式,若是匹配,就返回匹配成功的結果;若是不匹配,就返回Nonespa
import re content = 'Hello 123 4567 World_This is a Regex Demo' print(len(content)) result=re.match('^Hello\s\d\d\d\s\d{4}\s\w{10}',content) print(result) print(result.group()) print(result.span())
在match()方法中,第一個參數傳入正則表達式,第二個參數傳入要匹配的字符串code
group()方法能夠輸出匹配到的內容,span()方法能夠輸出匹配的範圍即匹配到的字符串再原字符串中的位置範圍對象
import re content = 'Hello 1234567 World_This is a Regex Demo' print(len(content)) result=re.match('^Hello\s(\d+)\sWorld',content) print(result) print(result.group(1)) print(result.span())
這若是想把字符串中的1234567提取出來,此時能夠將數字部分的正則表達式用()括起來,而後調用group(1)獲取匹配結果;若是正則表達式後面還有()包括的內容,那麼能夠依次用group(2),blog
group(3)來獲取索引
import re content = 'Hello 1234567 World_This is a Regex Demo' result=re.match("^He.*(\d+).*Demo$",content) print(result) print(result.group(1))
這裏group(1)獲得的是數字7,這是貪婪匹配的緣由;在貪婪匹配下,.*會匹配儘量多的字符。正則表達式中.*後面是\d+,即至少一個數字,並無指定多少數字,所以.*就儘量匹配多的字符ci
非貪婪匹配的寫法是.*?,即儘量匹配少的字符,若是匹配的結果在字符串結尾,.*?就有可能匹配不到任何內容字符串
由於.匹配的是除換行符以外的任意字符,遇到換行符時.*?就不能匹配了,只須要加一個re.S修飾符便可,該修飾符的做用是使.匹配包括換行符在內的全部字符串io
如下是一些修飾符的做用:編譯
修飾符 | 描述 |
re.I | 使匹配對大小寫不敏感 |
re.L | 作本地化識別(local-aware)匹配 |
re.M | 多行匹配,影響^和$ |
re.S | 使.匹配包括換行在內的全部字符串 |
re.U | 根據Unicode字符集解析字符,這個標誌影響\w,\W,\b和\B |
re.X | 該標誌經過給予你更靈活的格式以便你將正則表達式寫的更易於理解 |
當遇到用於正則匹配模式的特殊字符時,在前面加反斜線轉義一下便可
import re content='(百度)www.baidu.com' result=re.match('\(百度\)www\.baidu\.com',content) print(result)
search()在匹配時會掃描整個字符串,而後返回第一個成功匹配的結果。,也就是說,正則表達式能夠是字符串的一部分,在匹配時,search()方法會依次掃描字符串,直到找到第一個符合規則的字符串。返回返回匹配內容,若是搜索完成尚未找到,就返回None
import re content='hhhhhh Hello 1234567 World_This is a Regex Demo hhhh' result=re.search('Hello.*?(\d+).*?Demo',content) print(result)
search()方法能夠返回匹配正則表達式的第一個內容,若是想要匹配正則表達式的全部內容,就要藉助findall()方法
該方法會搜索整個字符串,而後返回匹配正則表達式的全部內容,返回的列表結果能夠用索引來依次取出
除了使用正則表達式提取信息外,有時候還須要藉助它來修改文本
import re content='65deng1we2n0xion31g' content=re.sub('\d+','',content) print(content)
sub()給第一個參數傳入\d+來匹配全部數字,第二個參數爲替換成的字符串(如去掉該參數的話,能夠賦值爲空),第三個參數爲原字符串
這個方法能夠將正則字符串編譯成正則表達式對象,以便在後面的匹配中複用
import re content1='2019-1-1 1:00' content2='2019-1-2 2:00' content3='2019-1-3 3:00' pattern=re.compile('\d{1}:\d{2}') result1=re.sub(pattern,'',content1) result2=re.sub(pattern,'',content2) result3=re.sub(pattern,'',content3) print(result1,result2,result3)
compile()還能夠傳入修飾符,該方法能夠說是給正則表達式作了一層封裝,以便更好的複用