re.sub說明
re.sub的參數:有五個參數re.sub(pattern, repl, string, count=0, flags=0)
其中三個必選參數:pattern, repl, string
兩個可選參數:count, flags
第一個:patternpattern
表示正則中的模式字符串。反斜杠加數字(\N),則對應著匹配的組(matched group) 比如\6
,表示匹配前面pattern中的第6個group
第二個參數:replrepl
就是replacement,被替換,的字符串的意思。repl可以是字符串,也可以是函數
。repl是字符串如果repl是字符串的話,其中的任何反斜杠轉義字符,都會被處理的。即:\n
:會被處理為對應的換行符;\r
:會被處理為回車符; 其他不能識別的轉移字符,則只是被識別為普通的字符: 比如\j
,會被處理為j這個字母本身; 反斜杠加g以及中括號內一個名字,即:\g
,對應著命了名的組,named group
第三個參數:stringstring
即表示要被處理,要被替換的那個string字符串。沒什么特殊要說明。
第四個參數:count
舉例說明:繼續之前的例子,假如對于匹配到的內容,只處理其中一部分。比如對于:hello 123 world 456 nihao 7891只是像要處理前面兩個數字:123,456,分別給他們加111,而不處理789,那么就可以寫成:
replacedStr = re.sub("(?P\d+)", _add111, inputStr, 2);
第五個參數:flags
類似于管道,可以進行忽略大小寫,全局匹配,ASCII,UNICODE匹配等
可選值:
"ASCII", "IGNORECASE", "LOCALE", "MULTILINE", "DOTALL", "VERBOSE", "UNICODE",
python實現忽略大小寫替換高亮并顯示之前的大小寫
核心代碼:
def show_highlight(key: str, origin: str) -> str:
"""字符串替換,忽略大小寫,并返回以前的大小寫"""
re_data = re.findall(key, origin, flags=re.IGNORECASE)
def tmp(obj):
for i in re_data:
if obj.group(0) == i: return '<span class="keyWord">' + i + '</span>'
return re.sub(key, tmp, origin, flags=re.IGNORECASE)
print(show_highlight('AND', 'AND and And AnD'))
測試結果:
<span class="keyWord">AND</span> <span class="keyWord">and</span> <span class="keyWord">And</span> <span class="keyWord">AnD</span>