当前位置: 首页 > 知识库问答 >
问题:

基于开始或结束模式排除行的regex表达式

邰棋
2023-03-14

我在一个文件中搜索与Python中三种可能的regex模式之一不匹配的行。如果我单独搜索每一个,模式是:

pattern1 = '_[AB]_[0-9]+$'
pattern2 = 'uce.+'
pattern3 = 'ENSOFAS.+'

Pattern2和pattern3位于行的开始处(这些行严格地以>)开始。字符串末尾的Pattern1。

我已经看到了将pattern2和pattern3与^>(?:(?!UCEENSOFAS).+$)(我不确定格式是否正确)这样的方法。如何在单个regex搜索中也包括pattern1。我这样做的原因是跳过与这些模式中任何一个匹配的行。

共有1个答案

田博超
2023-03-14

本质上,您将三个较小的正则结合成一个,说明匹配器可以匹配其中的任何一个来代替另一个。正如@TallChuck所评论的那样,一般的方法是交替操作符。因此,根据他的例子和你的变量,我可能会这样做:

pattern1 = '_[AB]_[0-9]+$'
pattern2 = '^>uce.+'
pattern3 = '^>ENSOFAS.+'
re_pattern = '(?:{}|{}|{})'.format(pattern1, pattern2, pattern3)
your_re = re.compile( re_pattern )

您没有理由不能在每个子模式中包含行首锚点^,所以我已经这样做了。同时,您的示例使用了分组(非捕获)运算符`(?:...),所以我在这里也模仿了它。

上面是完全一样的,就像你一下子把它放在一起:

your_re = re.compile('(?:_[AB]_[0-9]+$|^>uce.+|^>ENSOFAS.+)')
^(?:.*_[AB]_[0-9]+$|>uce.+|>ENSOFAS.+)
 类似资料:
  • 考虑基于范围的for循环的begin expr和end expr的规范(N4140[标准范围]/p1)。给定类型为RangeT的范围, 开始表达式和结束表达式的确定如下: 如果“范围”是数组类型,则“开始表达式”和“结束表达式”分别是“范围”和“范围绑定”,其中“范围绑定”是数组绑定。如果RangeT是大小未知的数组或类型不完整的数组,则程序格式错误 如果RangeT是类类型,则在类RangeT的

  • 我正在尝试编写代码来扫描文件,并在工具读取前后为空行的某行代码时生成“匹配!”消息。我感兴趣的匹配行是: 使用regex.h,我有一个简单的工具来编译我的regex模式,然后对文件中的每一行执行它来搜索匹配。该工具的基本功能很好:我能够让它成功地搜索各种正则表达式匹配。当我试图匹配在上述文本行前后包含一个空行的正则表达式时,出现了问题。这是我预编译的正则表达式: 我已经尝试了一系列与此类似的不同组

  • 我正在使用正则表达式验证字符串(“-test-”)的开头和结尾是否包含hypens(-)。所以我找到了一个正则表达式来限制正则表达式开始和结束时的催眠。 当字符串包含多个带有或不带有hypen的字符(“aa”)时,该正则表达式按预期进行了验证。但是当我在没有hypen的情况下简单地传递一个字符串(“a”)时,它并没有像预期的那样工作。 此外,还需要允许特殊字符和字母数字字符,如“$abcd” 你们

  • 我有一个表单,我想限制第一个和最后一个字符。(javascript)限制是: 输入必须以字母数字开始和结束,而不是下划线,字母数字之间只允许下划线 示例: 我尝试创建我的正则表达式如下: 这不允许在开头加下划线,这很好,但允许在我想要限制的结尾加下划线。 这里缺少任何输入。 谢谢 ---更新--- 我在angularjs应用程序中使用正则表达式。 我已将我的指令创建为: 我在我的html中使用它作

  • 问题内容: 正则表达式可以匹配空格 或 字符串的开头吗? 我正在尝试用英镑符号替换缩写为GBP的货币。我可以匹配任何以GBP开头的东西,但我想更加保守一些,并在它周围寻找某些定界符。 我可以同时做后两个例子吗? 问题答案: 使用OR“ ”运算符:

  • 为什么我会得到:非法的表达式开始-公共静态int noOfLetters(String str){error?我如何修复它?