Python正则表达式带2个否定条件的前瞻
在Python中,我遇到了一个正则表达式的问题,它在前瞻中有两个否定条件。这似乎应该很容易,但不知何故,在几次尝试后,我没有看到解决方案 我有大量的文本,包括: 受益人 受益人账户 受益银行 我想要的是: 受益人名称 受益人帐户 受益银行 我不想错误地改变 受益人对受益人名称 因为这可能导致 受益人姓名账户 受益人名称银行 就是说,我想改变 “受益人”至“受益人名称” 当且仅当 “受益人”后面不跟“账户” 及 “受益人”后面不跟“银行” 但是我如何用AND测试这两个lookahead以确保这两个条件都满足呢 在regex中,我只看到了OR-如下图所示: bene_lookahead_或=r'受益人(账户)|受益人(银行)' 是否有Python正则表达式和? 如果没有,是否有Python正则表达式的否定方法? 也就是说,否定OR,就像布尔代数NOR一样 比如 将受益人更改为受益人名称 如果不是 ( 受益人之后是账户 或 受益人后面跟着银行 ) 很明显我在这里遗漏了一些东西。。。Python正则表达式带2个否定条件的前瞻,python,regex,boolean-logic,lookahead,negative-lookahead,Python,Regex,Boolean Logic,Lookahead,Negative Lookahead,在Python中,我遇到了一个正则表达式的问题,它在前瞻中有两个否定条件。这似乎应该很容易,但不知何故,在几次尝试后,我没有看到解决方案 我有大量的文本,包括: 受益人 受益人账户 受益银行 我想要的是: 受益人名称 受益人帐户 受益银行 我不想错误地改变 受益人对受益人名称 因为这可能导致 受益人姓名账户 受益人名称银行 就是说,我想改变 “受益人”至“受益人名称” 当且仅当 “受益人”后面不跟“账户” 及 “受益人”后面不跟“银行” 但是我如何用AND测试这两个lookahead以确保这两个
谢谢你的帮助 您可以尝试在最后一个备选方案为空字符串的情况下使用备选方案,并一次性完成:
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)
您可以尝试使用最后一个备选方案为空字符串的备选方案,并一次性完成:
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中包含否定的任何内容,如类或断言,自动对每个项目求反,并将其和在一起 在您的示例中,它将是这种用法<代码>受益人(?![](?:账户|银行)) 扩大
beneficiary
(?! # Negative assertion
[ ] # Space
(?: # Not any of these
acct
| account
| bank
)
)
NOR中包含否定的任何内容,如类或断言,自动对每个项目求反,并将其和在一起 在您的示例中,它将是这种用法<代码>受益人(?![](?:账户|银行)) 扩大
beneficiary
(?! # Negative assertion
[ ] # Space
(?: # Not any of these
acct
| account
| bank
)
)
辛:谢谢你-这帮我解决了我的问题。非常感谢@sm_忍者-没问题。如果有任何答案帮助解决了你的问题,你可以投票给他们,如果有,你可以给他们打上“已解决”的分数。非常感谢@sm_忍者-没问题。如果有任何答案帮助你解决了问题,你可以投票给他们,如果有,你可以给他们打分。卡西米尔和希波利特:谢谢你的反馈。我在这里看到一些代码,我可以从中学习,这些代码总是受欢迎的。同时,它帮助我意识到我没有清楚地解释我的问题-我下次要考虑的事情…我可能会有“受益人{这里有各种文本项目…}.{一些更多种文本}受益人账户{更多文本}……受益人银行{更多文本}”……一些或全部或没有一个将出席,而且没有特别的顺序。卡西米尔和希波利特:谢谢你的反馈。我看到一些代码,我可以从中学习到,总是受欢迎的。而且,它帮助我意识到我没有清楚地解释我的问题-对我来说要考虑下一次…我可能有“受益者”。{这里的各种文本项目…}.{一些更多的各种文本}受益人账户{更多的文本}……受益人银行{更多的文本}……并且其中的一些或全部或没有出现,并且没有特定的顺序。