正則表達式替換掉漢字中間的空格

替換掉漢字中間的空格 

import re 
original_str = 'a  a 我我我  我我  我   我   sf   ssf'  
patten = re.compile(r'([\w\u4e00-\u9fa5]{1})\s+([\u4e00-\u9fa5]{1})')
original_str = patten.sub(r'\1\2',original_str ).strip()
patten = re.compile(r'([\u4e00-\u9fa5]{1})\s+([\u4e00-\u9fa5\w]{1})\s+')
original_str  = patten.sub(r'\1\2',original_str ).strip()
print(original_str)

結果爲:a  a我我我我我我我sf   ssf

sub裏的 \1  \2......  都要和正則表達式集合()一起使用
簡單的說就是
\1表示重複正則第一個圓括號內匹配到的內容
\2表示重複正則第二個圓括號內匹配到的內容

取出括號裏的內容

original_str = '(asf)(test)'
patten = re.compile('[\(?(?](.*?)[\)?)?]', re.S) #提取括號內內容
content_in_bracket = re.findall(patten, original_str)
print(content_in_bracket)

結果爲:['asf', 'test']

取出最外層括號裏的內容

original_str = '(qqq(asf)(test)a)'
patten = re.compile('[\(?(?](.*)[\)?)?]', re.S) #提取括號內內容
content_in_bracket = re.findall(patten, original_str)
print(content_in_bracket)

結果爲:['qqq(asf)(test)a']

不使用re.S參數,則只在每一行內進行匹配,如果一行沒有,就換下一行重新開始,不會跨行。

使用re.S參數以後,正則表達式會將這個字符串作爲一個整體,將“\n”當做普通的字符加入到這個字符串中,在整體中進行匹配。

正則表達式的貪婪與非貪婪匹配

如:str="testttttt"           

       patter p="te.*t"

貪婪匹配:正則表達式一般趨向於最大長度匹配,也就是所謂的貪婪匹配。

       如上面使用模式patter匹配字符串str,結果就是匹配到:testttttt。

非貪婪匹配:就是匹配到結果就好,就少的匹配字符。

       如上面使用模式patter匹配字符串str,結果就是匹配到:test

默認是貪婪模式;在量詞後面直接加上一個問號?就是非貪婪模式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章