我有一個問題,通過以下 re.sub() 方法,我能夠從 *.txt 檔案中提取所有郵件地址。
emails = re.findall(r"[a-z0-9\.\- _] @[a-z0-9\.\- _] \.[a-z] ", file)
現在,我想從這個 *.txt 中洗掉所有標點符號,因為其中還有一些文本。
我洗掉了標點符號
output = re.sub(r'^\w\s', '', file)
但此功能還會從文本中的電子郵件地址中洗掉標點符號。我如何在這個 re.sub 中為郵件地址寫一個例外?
謝謝你。
uj5u.com熱心網友回復:
您可以使用
re.sub(r"([a-z0-9.\- _] @[a-z0-9.\- _] \.[a-z] )|[^\w\s]", r"\1", file)
在這里,電子郵件模式被捕獲到第 2 組\1中,替換模式中的反向參考恢復了結果字串中的電子郵件文本。
Note[^\w\s]匹配除單詞和空白字符之外的任何字符,因此不匹配下劃線。如果您也想洗掉下劃線,請將其添加為替代項:
re.sub(r"([a-z0-9.\- _] @[a-z0-9.\- _] \.[a-z] )|[^\w\s]|_", r"\1", file)
uj5u.com熱心網友回復:
假設電子郵件地址由單詞字符和一個@字符組成,以下正則運算式應該可以作業:
(\w*@\w*([^\w\s])|([^\w\s])\w*@\w*)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/409272.html
標籤:
