Python 使用正则表达式匹配字符串,特定字符串组合除外

Python 使用正则表达式匹配字符串,特定字符串组合除外,python,regex,python-2.7,regex-negation,Python,Regex,Python 2.7,Regex Negation,在列表中,我需要匹配特定实例,但字符串的特定组合除外: 假设我有一个字符串列表,如下所示: l = [ 'PSSTFRPPLYO', 'BNTETNTT', 'DE52 5055 0020 0005 9287 29', '210-0601001-41', 'BSABESBBXXX', 'COMMERZBANK' ] 我需要匹配所有指向a的单词,此代码具有以下形式: 6封信后接 2个字母/数字,后跟 3个可选字母/数字 因此,我编写了以下正则表达式来匹配这种特定模式 import re rege

在列表中,我需要匹配特定实例,但字符串的特定组合除外:

假设我有一个字符串列表,如下所示:

l = [
'PSSTFRPPLYO',
'BNTETNTT',
'DE52 5055 0020 0005 9287 29',
'210-0601001-41',
'BSABESBBXXX',
'COMMERZBANK'
]
我需要匹配所有指向a的单词,此代码具有以下形式: 6封信后接 2个字母/数字,后跟 3个可选字母/数字

因此,我编写了以下正则表达式来匹配这种特定模式

import re
regex = re.compile(r'(?<!\w)[a-zA-Z]{6}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?(?!\w)')
for item in l:
    match = regex.search(item)
    if match:
        print('found a match, the matched string {} the match {}'.format( item, item[match.start() : match.end()]
    else:
        print('found no match in {}'.format(item)
我宁愿

result = ['PSSTFRPPLYO', 'BNTETNTT', 'BSABESBBXXX', 'COMMERZBANK' ]
所以我需要的是只匹配不包含单词“bank”的字符串

为此,我将我的正则表达式改进为:

regex = re.compile((?<!bank/i)(?<!\w)[a-zA-Z]{6}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?(?!\w)(?!bank/i))
regex=re.compile(?
简单地说,我使用了消极的回顾和展望,以获得关于这两个概念的更多信息

我的正则表达式没有执行预期的过滤,我错过了什么?

您可以尝试以下操作:

import re
final_vals = [i for i in l if re.findall('^[a-zA-Z]{6}\w{2}|(^[a-zA-Z]{6}\w{2}\w{3})', i) and not re.findall('BANK', i, re.IGNORECASE)]
输出:

['PSSTFRPPLYO', 'BNTETNTT', 'BSABESBBXXX']

(a-z[a-z0-z0-9[a-z0-z0-9[a-z0-0-9[3}{{3})银行::((:[a-z0-z0-9-9[3}?)代码>和
i<代码>i<代码>i<代码>i<代码>我的[a-z[a-z0-z0-z0-z0-9-9[3}{{{{{3})银行::::::::((((((:[a-a-a-z0-z0-z0-z0-z0-z0-z0-9-9[a-9[a-z0-z0-9[a-9-9-9-9-9-9-9[a-9[a-9[a-z0-z0-9[a-9[a-z0-9[a-9[a-z0-9[[a-z0-9]{2}|[a-z0-9]{5})$
(更多字符,但几乎少了400个步骤)@ctwheels您使用了什么来分析步骤数?是否无法将条件包含在正则表达式中?与其遍历字符串两次,请不要误会,您的解决方案完成了任务,非常感谢。
['PSSTFRPPLYO', 'BNTETNTT', 'BSABESBBXXX']