python之正则(一)
1.常用正則表達式:
\d:數字[0-9] ,實例:a\dc -> a1c
\D:非數字[^\d],實例:a\Dc -> abc
\s:空白字符[<空格>\t\r\n\f\v] 實例:a\sc ->a c
\S:非空白字符[^\s] 實例:a\Sc ->abc
\w:單詞字符[A-Za-z0-9_] 實例:a\wc ->abc
\W:非單詞字符[^\W]
*:匹配前一個字符0或無限次; abc* -> ab或abc或abcc
+:匹配前一個字符1次或無限次 abc+ -> abc或abcc
?:匹配前一個字符0次或1次 abc? -> ab或者abc
{m}:匹配前一個字符m次 ab[2]c -> abbc
^:匹配字符串開頭,在多行模式中匹配每一行的開頭;
$:匹配字符串結尾,在多行模式中匹配每一行的結尾;
\A:僅匹配字符串開頭
\Z:僅匹配字符串結尾
\b:匹配\w和\W之間;
\B:{^\b}
以什么結尾:一般這樣寫(abc)$
|:它總是先嘗試匹配左邊的表達式,一旦成功則跳過匹配右邊的表達式;
(...):被括起來的表達式將作為分組,從表達式左邊開始每遇到一個分組的
左括號'(',編號+1
另外,分組表達式作為一個整體,可以后接數量詞,表達式中的|僅在
該組中有效;
例如:(abc){2} -> abcabc
a(123|456)c -> a456c
(?P<name>...):分組,除了原有的編號外再指定一個額外的別名;
(?P<id>abc){2} -> abcabc
\<number> :引用編號為<number>的分組匹配到的字符串.
(\d)abc\1 -> 1abc1或者5abc5
(?P=name):引用別名為<name>的分組匹配到的字符串.
(?P<id>\d)abc(?P=id) -> 1abc1或者5abc5
分組:(?P<name>...)省略的部分就是正常的正則匹配,我們把
匹配到的這個整體給賦一個變量名字name,在后續調用的時候,
分組表達式的寫法:(abc)edcrfv.*(wsx).*\1
2.編譯正則表達式
r表示raw的簡及raw string 意思是原生字符,也就是說這個字符串中間的特殊字符不用轉義;
比如你要表示'\n',可以這樣:r'\n'
但是,如果你不用原生字符,而是用字符串你得這樣:'\\n'
shell 中:grep -E或egrep
re.compile(pattern[,flags])
這個方法就是將字符串的正則表達式編譯成正則對象,第二個參數flag是匹配
模式,取值可以使用按位或者運算符"|"表示同時生效,比如re.l | re.M,
flag的可選值有:
re.l(re.lGNORECASE):忽略大小寫(括號內是完整寫法,下同)
M(MULTILINE):多行模式,改變'^'和'$'的行為;
S(DOTALL):點任意匹配模式,改變'.'的行為;
L(LOCALE):使預定義字符類\w \W \b \B \s \S取決于當前區域設定;
U(UNICODE):使預定義字符類\w \W \b \B \s \S \d \D 取決于unicode定義的字符屬性.
X(VERBOSE):詳細模式。這個模式下正則表達式可以是多行,忽略空白符,并
可以加入注釋。以下兩個正則表達式是等價的:
a = re.compile(r"""\d+ #the integralpart
\. #the decimal point
\d * # some fractional digits""",re.X)
b = re.compile(r"\d+\.\d")
1.正則匹配是,優先編譯成正則對象,然后再進行匹配,
3.re正則對象和正則匹配效率比較
re模塊是python中處理正則表達式的一個模塊,通過re模塊的方法,把正則表達式pattern
編譯成正則對象,以便使用正則對象的方法.那為什么要使用re模塊來把正則表達式
搞成正則對象呢,最主要的是可以提高代碼的執行效率,正則對象比正則匹配快好多;
轉載于:https://www.cnblogs.com/awenxianliao/p/7837178.html
總結
以上是生活随笔為你收集整理的python之正则(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux解决加载Qt xcb plug
- 下一篇: HTML常用的特殊符号&前端使用