正則匹配技巧
使用python包re
基本函數(shù)
-
re.match(正則表達(dá)式, 原字符串)
從最開始匹配坏怪,但只匹配一次 -
re.findall(正則表達(dá)式, 原字符串)
匹配字符串中所有滿足正則表達(dá)式的部分 -
re.sub(正則表達(dá)式, 替換成什么, 原字符串)
將正則表達(dá)式匹配到的部分替換成任意其他
匹配模式的符號(hào)
-
.
匹配除\n
之外的所有單字符 -
*
匹配其前方字符的重復(fù)多次。例如
texttext
,text*
匹配到textt
-
[]
中括號(hào)內(nèi)的內(nèi)容被分成字符,匹配其中的每個(gè)字符怔揩,字符間無先后妇拯,是‘或’的關(guān)系粱腻。例如,
[abc]
匹配a
或b
或c
尼夺。 -
()
中表示一個(gè)子表達(dá)式尊残,同時(shí)可用(|)
進(jìn)行有先后的多選匹配炒瘸,總是匹配其中最先出現(xiàn)的那個(gè)字符。例如寝衫,
(abc|a|b)
顷扩,匹配三者中最先出現(xiàn)的那個(gè)。 -
\
標(biāo)記特殊字符(如換行符\n
)慰毅,或用來顯示模式符號(hào)的原本含義:\*
或\(
隘截。例如,為了匹配
*
汹胃,需要使用\*
表達(dá)式婶芭。 -
?
出現(xiàn)在*、+
后時(shí)着饥,標(biāo)記前面的子表達(dá)式非貪婪(意思是最小匹配犀农,原文中重復(fù)多次,但只會(huì)匹配其中第一個(gè))宰掉。例如
a.*?b
呵哨,只會(huì)匹配accbababaacb
中的第一個(gè)accb
-
{n}、{n, n+}
表示匹配的次數(shù)的限制轨奄。例如
(text){2}
孟害,匹配texttext
-
^
可以限制正則匹配字符串的開始位置。例如
^Ab
挪拟,則匹配字符串AbcAb
中的字符串首的Ab纹坐,而不能匹配后面出現(xiàn)的Ab
。 -
^
在[^a-z]
中舞丛,表示一個(gè)取反的正則表達(dá)式耘子,匹配a-z以外的所有字符,其中[]
的用法球切,參照第3條谷誓。 -
s='adb00000000acb', ab=re.findall( r'a(.*?)b', s, re.S)
,匹配表達(dá)式中()
中的部分吨凑。例如捍歪,從
acvbabb
中匹配到cv
- **高難度用法**:
(1號(hào)表達(dá)式)(2號(hào)表達(dá)式)(3號(hào)表達(dá)式)
,這樣用()
括號(hào)鸵钝,將不同正則表達(dá)式括起來后糙臼,對(duì)字符串進(jìn)行匹配后,可以用re.group(1或2或3)
單獨(dú)獲取到三個(gè)表達(dá)式對(duì)應(yīng)匹配到的字符串恩商。(re.group(0)
或者不使用group
則獲取整個(gè)全局的正則匹配) - **高難度用法**:python版命名組方法
(?P<name>正則表達(dá)式)
使用re.group('name')
变逃,可以用指定的name匹配某個(gè)字符串。
注意: 網(wǎng)上一些代碼類似怠堪,reg = /a-zA-z/
其中 /
符號(hào)是某些編程語(yǔ)言中揽乱,指示一個(gè)正則表達(dá)式起止的記號(hào)
獲得中文和英文標(biāo)點(diǎn)符號(hào)
from zhon.hanzo import punctuation
import string.punctuation