首页 > 解决方案 > 匹配单词的第一部分并且仅匹配剩余单词的部分的正则表达式

问题描述

我有一份按揭银行名称的清单。有时它们后跟缩写 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)

我只是没看到。有任何想法吗?

标签: regexpython-3.x

解决方案


您可以使用

r'\bBENEF(?:ICIARY)?\b'

查看正则表达式演示

细节

  • \b- 引导词边界
  • BENEF- 一个BENEF子串
  • (?:ICIARY)?- 一个可选的非捕获组,它不将其值存储在子匹配中并匹配 1 或 0 次重复ICIARY(由于?量词)
  • \b- 尾随单词边界

Python 演示

import re
s = "BENEFIT, BENEFITS, BENEFACTOR, BENEFACTORS, BENEFICIARIES BENEF BENEFICIARY"
print(re.sub(r"\bBENEF(?:ICIARY)?\b", "", s))
# => BENEFIT, BENEFITS, BENEFACTOR, BENEFACTORS, BENEFICIARIES  

推荐阅读