我正在嘗試從 Outlook“to”約定中的字串決議名稱和姓氏的所有實體,并將每個實體保存在 python 串列中。我正在使用 Python 3.6.4。
例如,我想要以下字串:
“致:約翰列儂 <[email protected]> \b002;保羅麥卡特尼 <[email protected]> \b002;”
被決議為:
['約翰列儂','保羅麥卡特尼']
我使用用python中的另一個字串替換單詞串列中的所有單詞作為參考,并提出了以下代碼:
import re
prohibitedWords = [r'to:',r'To:','\b002',"\<(.*?)\>"]
mystring = 'To: John Lennon <[email protected]> \b002; Paul McCartney <[email protected]> \b002;'
big_regex = re.compile('|'.join(prohibitedWords))
the_message = big_regex.sub("", str(mystring)).strip()
print(the_message)
但是,我得到以下結果:
John Lennon ; Paul McCartney ;
這不是最佳選擇,因為我有很多無法決議的空間。此外,我有一種感覺,這不是解決此問題的最佳方法。感謝任何建議。
謝謝
uj5u.com熱心網友回復:
使用 re.sub 并使用這些部分創建交替,[r'to:',r'To:','\b002',"\<(.*?)\>"] 您將用空字串替換匹配項。
如果您要洗掉的所有字符都消失了,您將得到一個字串,John Lennon Paul McCartney 如本Python 示例中所示,例如,如果您想拆分,則您不知道哪個部分屬于哪個部分。
此外,洗掉周圍的空白字符可能會導致在洗掉它們時出現意外的間隙或連接結果。
您可以通過匹配可能的主要部分來使匹配更加具體,并捕獲您想要的部分而不是替換。
(?:\\b[Tt]o:|\b002;)\s*(. ?)\s*<[^<>@] @[^<>@] >
(?:\\b[Tt]o:|\b002;)匹配Toto或 退格字符和 002\s*匹配可選的空白字符(. ?)捕獲第 1 組中的 1 個或多個字符\s*匹配可選的空白字符<[^<>@] @[^<>@] >在標簽之間匹配單個@
請參閱正則運算式演示和Python 演示。
例如
import re
pattern = "(?:\\b[Tt]o:|\b002;)\s*(. ?)\s*<[^<>@] @[^<>@] >"
mystring = 'To: John Lennon <[email protected]> \b002; Paul McCartney <[email protected]> \b002;'
print(re.findall(pattern, mystring))
輸出
['John Lennon', 'Paul McCartney']
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/358680.html
上一篇:正則運算式洗掉尾隨可選垃圾
下一篇:查找巧合并添加列
