正则表达式匹配单词的第一部分,仅匹配剩余单词的一部分

时间:2018-06-25 16:41:09

标签: regex python-3.x

我有一个抵押银行名称列表。有时,它们后跟缩写BENEF或BENEFICIARY。我需要编写一个正则表达式来查找BENEF和BENEFICIARY,因为我想从银行名称中删除这些单词。但是,我不想删除诸如“福利”,“福利”,“福利人”,“福利人”,“受益人”等字眼。

这不起作用:

import re
bankname = re.sub(r'(BENEF)(ICIARY)?', '', bankname)

可以,但是必须有一个更优雅的解决方案:

import re
bankname = re.sub(r'(\bBENEF\b|\bBENEFICIARY\b)', '', bankname)

我只是没有看到它。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用

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

请参见regex demo

详细信息

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

Python demo

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