我在文件中搜索与python中三种可能的regex模式之一不匹配的行。如果我要逐个搜索,模式是:
pattern1 = '_[AB]_[0-9]+$'
pattern2 = 'uce.+'
pattern3 = 'ENSOFAS.+'
Pattern2和pattern3接近行首(这些行从技术上讲是以>
开始的)。字符串末尾的Pattern1。你知道吗
我见过将pattern2和pattern3与^>(?:(?!uce|ENSOFAS).+$)
(我不确定格式是否正确)结合起来的方法。如何在单个正则表达式搜索中也包含pattern1。我这样做的原因是跳过与这些模式中任何一个匹配的行。你知道吗
实际上,您将三个较小的正则表达式组合成一个正则表达式,表示matcher可以匹配其中任何一个正则表达式来代替另一个正则表达式。一般的方法是alternation operator,正如@tallcuck所评论的那样。所以,根据他的例子和你的变量,我可以这样做:
没有理由不能在每个子模式中包含行锚点
^
的开头,所以我已经这样做了。同时,您的示例使用了分组(非捕获)操作符,即`(?:…),所以我在这里也模仿了。你知道吗上面的内容与您一次将所有内容组合在一起时完全相同:
你可以选择哪个更易于阅读和维护。你知道吗
最后,请注意,按照问题的最后一段建议,拉出行锚的开头(
^
)可能更有效,或者regex引擎可能足够聪明,可以自己完成这项工作。建议先让它工作,然后优化如果你需要。你知道吗另一种方法是在第一个模式中添加“match anything”操作符(
.*
),以匹配行开头的所有三个:相关问题 更多 >
编程相关推荐