“而不是搜索“多重条件

2024-10-02 10:34:09 发布

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

我正在编写python脚本的一部分,遇到了一个我无法解决的情况。在这一部分中,我打开了一个文件,并最初以>开头的行为目标。但是,我想跳过那些具有以下regex模式的行:

uce.+$
ENSOFAS.+$
_[AB]_[0-9]+$
_[AB]_[0-9]+_rc$

如果我的代码如下所示,只针对其中一个,那么它可以工作:

^{pr2}$

但我也需要它来考虑其他的可能性。我尝试过…not re.search(('uce.+$ | ENSOFAS.+$'), line.strip()):not re.search(('uce.+$' | 'ENSOFAS.+$'), line.strip()):,以及其他变体,但是没有成功。我怎么才能得到搜索考虑所有四个可能的正则表达式?在


Tags: 文件re脚本目标searchabline模式
2条回答

如果您能够使用较新的^{}模块,则可以定义如下异常:

import regex as re

string = """
uce123
ENSOFAS123
_A_123
_B_123_rc
this line should be matched
"""

exceptions = [r'uce.+$', r'ENSOFAS.+$', r'_[AB]_[0-9]+$', r'_[AB]_[0-9]+_rc$']

rx = re.compile(r'(?:{})(*SKIP)(*FAIL)|(.+)'.format("|".join(exceptions)), re.MULTILINE)

lines = rx.findall(string)
print(lines)
# ['this line should be matched']

本质上,这将设置一个数组exceptions,该数组随后在整个表达式中联接。在

这是错误的:

not re.search(('uce.+$ | ENSOFAS.+$'), line.strip())

当oring正则表达式放在一起时,不要添加“空格以清晰起见”,因为它们被考虑在内。这是有效的:

^{pr2}$

相关问题 更多 >

    热门问题