現在有一系列的模糊匹配規則,需要對乙個文件中的每乙個句子利用每乙個匹配規則進行正則匹配,具體**如下:
# sentences為句子列表
# re_str為正規表示式列表,其中元素類似 "^你好$" 這種正規表示式
for sent in sentences:
for pattern in re_str:
if re.findall(pattern, sent):
print(sent)
break
**很簡單,但是在執行時出現了乙個問題,就是匹配速度非常慢,而且re_str的數量存在乙個臨界值,當數量大於臨界值,匹配速度大大降低,當數量小於臨界值,匹配速度大幅提公升。
首先說一下解決辦法,解決辦法就是利用re.complie對每乙個正規表示式進行編譯,具體如下:
# sentences為句子列表
# re_str為正規表示式列表,其中元素類似 "^你好$" 這種正規表示式
patterns = [re.compile(i) for i in re_str]
for sent in sentences:
for pattern in patterns :
if pattern.findall(sent):
print(sent)
break
個人認為,正規表示式匹配時,首先會對正則匹配字串進行編譯,然後將編譯結果進行快取,但是快取大小是有限的,所以當正規表示式數量達到一定規模時,新的編譯結果會將之前結果覆蓋,也就是說每次對乙個新的句子進行匹配時都需要對所有正規表示式進行重新編譯,這是主要的耗時點。反之亦然。 python正規表示式及使用正規表示式的例子
正規表示式 正則表達用來匹配字串 正規表示式匹配過程 正規表示式語法規則 匹配除換行 n 外的任意字串 abcabc 轉義字元,使後乙個字元改變原來的意思 a c a c 字符集,對應的位置可以是字符集中任意字元,字符集中的字元可以逐個列出,也可以給出範圍,如 abc 或 a c 第乙個字元如果是 ...
Python正規表示式使用
python正規表示式使用 正規表示式不是python內建的功能,所以需要引入import re模組才可以使用。正規表示式的功能很多,但是我們通常使用的功能也就是那幾個,這裡對工作中經常使用到的正規表示式進行乙個系統的總結。1.字元 匹配除了換行符 n 外的字元 轉義字元,使後乙個字元改變以前的意思...
python 正規表示式使用
場景 替換很多動態資料的時候,會重複很多的條件判斷if,replace。作用 完成多步,同時去匹配符合特定規則的字串,完成通用的正則匹配 正規表示式是一種通用的字串匹配技術,是不會因為程式語言不同發生變化。想要查詢某種特徵的,具有一定規則的字串,都是可以嘗試使用正規表示式 jsonpath,xpat...