我有一个抵押银行名称列表。有时,它们后跟缩写BENEF或BENEFICIARY。我需要编写一个正则表达式来查找BENEF和BENEFICIARY,因为我想从银行名称中删除这些单词。但是,我不想删除诸如“福利”,“福利”,“福利人”,“福利人”,“受益人”等字眼。
这不起作用:
import re
bankname = re.sub(r'(BENEF)(ICIARY)?', '', bankname)
可以,但是必须有一个更优雅的解决方案:
import re
bankname = re.sub(r'(\bBENEF\b|\bBENEFICIARY\b)', '', bankname)
我只是没有看到它。有什么想法吗?
答案 0 :(得分:1)
您可以使用
r'\bBENEF(?:ICIARY)?\b'
请参见regex demo
详细信息
\b
-前导词边界BENEF
-一个BENEF
子字符串(?:ICIARY)?
-一个可选的非捕获组,不将其值存储在子匹配中,并且匹配ICIARY
的1或0次重复(由于?
量词)\b
-尾随单词边界import re
s = "BENEFIT, BENEFITS, BENEFACTOR, BENEFACTORS, BENEFICIARIES BENEF BENEFICIARY"
print(re.sub(r"\bBENEF(?:ICIARY)?\b", "", s))
# => BENEFIT, BENEFITS, BENEFACTOR, BENEFACTORS, BENEFICIARIES