Python正则表达式带2个负条件的lookahead

2024-06-09 14:42:43 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中,我遇到了一个regex的问题,它在lookahead中有两个负条件。这似乎应该很容易,但不知何故,我没有看到解决方案后,几次尝试。。。你知道吗

我有大量的文本,包括:

受益人

收款账户

收款银行

我想要的是:

受益人姓名

受益人账户

收款银行

我不想错误地改变

受益人对受益人名称

因为那会导致

受益人名称账户

收款行名称

也就是说,我想改变

“受益人”至“受益人名称”

当且仅当 “受益人”后面不跟“账户” 以及 “受益人”后面不跟“银行”

但是如何用AND测试这两个lookahead以确保满足这两个条件呢?你知道吗

在regex中,我只看到了OR-像这样: bene\u lookahead\u or=r'受益人\s?(?!账户)受益人?(?!银行)

有Python正则表达式和吗? 如果没有,是否有Python regex方法来否定? 也就是说,对OR取反就像布尔代数NOR一样 例如 将受益人更改为受益人名称 如果没有 ( 受益人后接账户 或 受益人后面跟着银行 )你知道吗

很明显我遗漏了什么。。。 谢谢你的帮助!你知道吗


Tags: orand文本名称错误账户银行解决方案
2条回答

您可以尝试使用最后一个备选方案为空字符串的备选方案,并一次性完成:

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's在否定的事物中,比如或断言,
自动对每个项目取反,并将其与一起。你知道吗

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

扩展

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

相关问题 更多 >