在Python中,我遇到了一个正则表达式的问题,它在前瞻中有2个负面条件。这似乎应该很容易,但不知何故,我几次尝试后都没有看到解决方案...
我有大量文本,可以包括:
受益人
受益人帐户
受益银行
我想要的是:
受益人姓名
受益人帐户
受益银行
我不想错误地改变
受益人姓名的受益人
因为这可能导致
受益人姓名acct
受益人名称银行
也就是说,我想改变
"受益人"到#34;受益人姓名"
当且仅当 "受益人"不是" acct" 和 "受益人"不是" bank"
但是如何使用AND测试两个前瞻以确保满足两个条件?
在正则表达式中,我只看到OR - 就像这样: bene_lookahead_or = r'受益人?(?!acct)|受益人\ S(?银行)'?
是否有Python正则表达式和? 如果没有,是否有Python正则表达式否定? 也就是说,像布尔代数NOR一样否定OR 如 将受益人更改为受益人姓名 如果不 ( 受益人之后是acct 要么 受益人之后是银行 )
我在这里明显遗漏了一些东西...... 谢谢你的帮助!
答案 0 :(得分:0)
您可以尝试使用替换,其中最后一个替代是空字符串,并在一次传递中执行:
s = '''beneficiary
beneficiary acct
beneficiary bank'''
pat = re.compile(r'\bbeneficiary( acct| bank|)\b')
rep = { ' acct':' account', ' bank':' bank' }
result = pat.sub(lambda m: 'beneficiary{0}'.format(rep[m.group(1)]) if m.group(1) else 'beneficiary name', s)
答案 1 :(得分:0)
NOR&#39> 内部负面内容,例如类或断言,
自动否定每个项目并且 ANDed 在一起。
在您的示例中,将使用此beneficiary(?![ ](?:acct|account|bank))
扩展
beneficiary
(?! # Negative assertion
[ ] # Space
(?: # Not any of these
acct
| account
| bank
)
)