Python 具有 2 个否定条件的正则表达式前瞻

Python regex lookahead with 2 negative conditions

在 Python 中,我在使用前瞻中有 2 个否定条件的正则表达式时遇到问题。这看起来应该很容易,但不知怎的,我在尝试了几次之后没有看到解决方案...

我有大段文字,其中可以包括:

受益人

受益人账户

收款银行

我想要的是:

收款人姓名

收款人账户

收款银行

不想改错

受益人至受益人姓名

因为这可能导致

收款人姓名账户

收款人姓名银行

也就是我要改

"beneficiary" 到 "beneficiary name"

当且仅当 "beneficiary" 后面没有 "acct" 和 "beneficiary" 后面没有 "bank"

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

在正则表达式中,我只看到 OR - 像这样: bene_lookahead_or = r'beneficiary\s?(?!acct) | beneficiary\s?(?!bank)'

是否有 Python 正则表达式 AND? 如果不是,是否有 Python 正则表达式方法来否定? 也就是说,像布尔代数 NOR 一样对 OR 求反 如 将受益人更改为受益人姓名 如果不 ( 受益人后跟帐户 要么 受益人后跟银行 )

我显然在这里遗漏了一些东西...... 感谢您的帮助!

您可以尝试使用最后一个替代项是空字符串的替代项,并一次完成:

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)

NOR 的 里面否定任何东西,比如 或断言,
自动否定每个项目并且 ANDed 在一起。

在你的例子中就是这样的用法 beneficiary(?![ ](?:acct|account|bank))

展开

 beneficiary
 (?!                           # Negative assertion
      [ ]                           # Space
      (?:                           # Not any of these
           acct
        |  account                       
        |  bank 
      )
 )