regex - 匹配单词的第一部分并且仅匹配剩余单词的部分的正则表达式
问题描述
我有一份按揭银行名称的清单。有时它们后跟缩写 BENEF 或 BENEFICIARY。我需要编写一个可以找到 BENEF 和 BENEFICIARY 的正则表达式,因为我想从银行名称中删除这些词。但是,我不想删除 BENEFIT、BENEFITS、BENEFACTOR、BENEFACTORS、BENEFICIARIES 等词。
这不起作用:
import re
bankname = re.sub(r'(BENEF)(ICIARY)?', '', bankname)
确实如此,但必须有一个更优雅的解决方案:
import re
bankname = re.sub(r'(\bBENEF\b|\bBENEFICIARY\b)', '', bankname)
我只是没看到。有任何想法吗?
解决方案
您可以使用
r'\bBENEF(?:ICIARY)?\b'
查看正则表达式演示
细节
\b
- 引导词边界BENEF
- 一个BENEF
子串(?:ICIARY)?
- 一个可选的非捕获组,它不将其值存储在子匹配中并匹配 1 或 0 次重复ICIARY
(由于?
量词)\b
- 尾随单词边界
import re
s = "BENEFIT, BENEFITS, BENEFACTOR, BENEFACTORS, BENEFICIARIES BENEF BENEFICIARY"
print(re.sub(r"\bBENEF(?:ICIARY)?\b", "", s))
# => BENEFIT, BENEFITS, BENEFACTOR, BENEFACTORS, BENEFICIARIES