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
)
)
在 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
)
)