Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式带2个否定条件的前瞻_Python_Regex_Boolean Logic_Lookahead_Negative Lookahead - Fatal编程技术网

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

Python正则表达式带2个否定条件的前瞻,python,regex,boolean-logic,lookahead,negative-lookahead,Python,Regex,Boolean Logic,Lookahead,Negative Lookahead,在Python中,我遇到了一个正则表达式的问题,它在前瞻中有两个否定条件。这似乎应该很容易,但不知何故,在几次尝试后,我没有看到解决方案 我有大量的文本,包括: 受益人 受益人账户 受益银行 我想要的是: 受益人名称 受益人帐户 受益银行 我不想错误地改变 受益人对受益人名称 因为这可能导致 受益人姓名账户 受益人名称银行 就是说,我想改变 “受益人”至“受益人名称” 当且仅当 “受益人”后面不跟“账户” 及 “受益人”后面不跟“银行” 但是我如何用AND测试这两个lookahead以确保这两个

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

我有大量的文本,包括:

受益人

受益人账户

受益银行

我想要的是:

受益人名称

受益人帐户

受益银行

我不想错误地改变

受益人对受益人名称

因为这可能导致

受益人姓名账户

受益人名称银行

就是说,我想改变

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

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

但是我如何用AND测试这两个lookahead以确保这两个条件都满足呢

在regex中,我只看到了OR-如下图所示: bene_lookahead_或=r'受益人(账户)|受益人(银行)'

是否有Python正则表达式和? 如果没有,是否有Python正则表达式的否定方法? 也就是说,否定OR,就像布尔代数NOR一样 比如 将受益人更改为受益人名称 如果不是 ( 受益人之后是账户 或 受益人后面跟着银行 )

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

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

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_忍者-没问题。如果有任何答案帮助你解决了问题,你可以投票给他们,如果有,你可以给他们打分。卡西米尔和希波利特:谢谢你的反馈。我在这里看到一些代码,我可以从中学习,这些代码总是受欢迎的。同时,它帮助我意识到我没有清楚地解释我的问题-我下次要考虑的事情…我可能会有“受益人{这里有各种文本项目…}.{一些更多种文本}受益人账户{更多文本}……受益人银行{更多文本}”……一些或全部或没有一个将出席,而且没有特别的顺序。卡西米尔和希波利特:谢谢你的反馈。我看到一些代码,我可以从中学习到,总是受欢迎的。而且,它帮助我意识到我没有清楚地解释我的问题-对我来说要考虑下一次…我可能有“受益者”。{这里的各种文本项目…}.{一些更多的各种文本}受益人账户{更多的文本}……受益人银行{更多的文本}……并且其中的一些或全部或没有出现,并且没有特定的顺序。