Python正则表达式预测有2个负面条件

时间:2017-06-02 21:50:29

标签: python regex boolean-logic lookahead negative-lookahead

在Python中,我遇到了一个正则表达式的问题,它在前瞻中有2个负面条件。这似乎应该很容易,但不知何故,我几次尝试后都没有看到解决方案...

我有大量文本,可以包括:

受益人

受益人帐户

受益银行

我想要的是:

受益人姓名

受益人帐户

受益银行

我不想错误地改变

受益人姓名的受益人

因为这可能导致

受益人姓名acct

受益人名称银行

也就是说,我想改变

"受益人"到#34;受益人姓名"

当且仅当 "受益人"不是" acct" 和 "受益人"不是" bank"

但是如何使用AND测试两个前瞻以确保满足两个条件?

在正则表达式中,我只看到OR - 就像这样: bene_lookahead_or = r'受益人?(?!acct)|受益人\ S(?银行)'?

是否有Python正则表达式和? 如果没有,是否有Python正则表达式否定? 也就是说,像布尔代数NOR一样否定OR 如 将受益人更改为受益人姓名 如果不 ( 受益人之后是acct 要么 受益人之后是银行 )

我在这里明显遗漏了一些东西...... 谢谢你的帮助!

2 个答案:

答案 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 
      )
 )