正則表達式(Regular expression)是組成搜索模式的一組字符序列,是記錄文本規則的代碼,用來檢查文本中是否包含指定模式的字符串,經過定義一個規則來匹配字符串。正則表達式普遍應用於在字符串查找和處理中,大多文本編輯器基本都支持正則表達式查找。本文將簡要介紹正則表達式語法,而後介紹Python語言中正則表達式使用方法。html
Unix之父Ken Tompson將正則表達式引入Unix,後面發展成了grep(Global Regular Expression Print)命令,因爲grep不支持+
、|
與?
,且分組比較麻煩,AT&T的Alfred Aho開發了egrep命令。隨着Unix的版本不斷演化,Unix中的程序(好比Linux三劍客中的awk、sed)所支持的正則表達式有差別,比較混亂。在1986年制定了POSIX(Portable Operating System Interface)標準,其中統一了正則表達式的語法。python
POSIX標準把正則表達式分爲兩種:BRE(Basic Regular Expressions)和ERE(Extended Regular Expressions )。BRE就是unix系統使用的grep命令,ERE對應egrep命令,是BRE的擴展。而linux系統使用的是GNU標準,linux發行版集成了GNU(Gnu’s Not Unix)套件,GNU在實現了POXIS標準的同時,作了必定的擴展。也包括GNU Basic Regular Expressions 和GNU Extends Regular Expressions。linux
正則表達式除了POSIX標準以外還有一個Perl分支,Perl與sed和awk兼容,後來演化成爲PCRE(Perl Compatible Regular Expressions),是一個用C語言編寫的正則表達式函數庫,功能很強大,性能比POSIX正則表達式好。PCRE被引入了其餘語言中,好比PHP, Tcl, Python, Ruby, C++, Java, R語言等等。nginx
代碼 | 說明 |
---|---|
. | 匹配除換行符之外的任意字符 |
\w | 匹配字母或數字或下劃線或漢字 |
\s | 匹配任意的空白符 |
\d | 匹配數字 |
\b | 匹配單詞的開始或結束 |
^ | 匹配字符串的開始 |
$ | 匹配字符串的結束 |
* | 重複零次或更屢次 |
擴展正則:grep加 -E
參數git
代碼/語法 | 說明 |
---|---|
+ | 重複一次或更屢次 |
? | 重複零次或一次 |
{n} | 重複n次 |
{n,} | 重複n次或更屢次 |
{n,m} | 重複n到m次 |
| | 表示或 |
語法 | 說明 |
---|---|
(?=exp) | 匹配exp前面的位置 |
(?<=exp) | 匹配exp後面的位置 |
(?!exp) | 匹配後面不是exp的位置 |
(?<!exp) | 匹配前面不是exp的位置 |
正則表達式在線測試工具:github
\ba\w*\b
正則表達式
\b\w{6}\b
express
\d+
編輯器
\d{5,12}
函數
^\d{5,12}$
0\d{2}-\d{8}
^\d{3}$
\bGET\b
^GET$
\bHello\b.*\bWorld\b
Python有一個內置正則表達式模塊 re
,可使用它來進行字符串操做:
import re
re
模塊提供瞭如下4種方法:
text = '1&\nbsp;hour(s) 2&\nbsp;min 25&\nbsp;s' re.findall(r'\d+',text) # 匹配時間(數字) re.findall(r'\d+|(?<=;)\w+',text) # 匹配時間和單位
output:
['1', '2', '25'] ['1', 'hour', '2', 'min', '25', 's']
re.findall(r'\d{2}+',text) # 匹配2位數字
替換字符target_text
:
xpath_path = '//*[contains(text(),"target_text")]/../td[5]/span' # xpath路徑 repl = "須要替換成的字符串" re.sub(r"(?<=\").*?(?=\")", repl, xpath_path) # 替換要查找的文本
output:
'//*[contains(text(),"須要替換成的字符串")]/../td[5]/span'
number = '12345678' re.sub(r"\B(?=(?:\d{3})+(?!\d))", ",",number) # 替換要查找的文本 re.sub(r"\B(?:(?:\d{3})+(?!\d))", ",",number)
output:
'12,345,678' '12,'
(?:\d{3})+(?!\d)
:
(?:exp)
:
文章標題:Python正則表達式
本文做者:hiyo
本文連接:https://www.cnblogs.com/hiyong/p/14175955.html 歡迎關注公衆號:「測試開發小記」及時接收最新技術文章!