Perl:匹配文件中的正则表达式

     2023-03-24     41

关键词:

【中文标题】Perl:匹配文件中的正则表达式【英文标题】:Perl: match regex from the file 【发布时间】:2022-01-11 18:23:13 【问题描述】:

我有一个制表符分隔的文件,其中包含有关项集的信息。每个项目集由一到三个项目组成:

MTMR14_Q1   NOTCH1_Q3   PRKCD_Q1        
MTMR14_Q1   NOTCH1_Q3   TFRC_Q3     
MTMR14_Q1   NOTCH1_Q3           
MTMR14_Q1           
MTMR14_Q1   PASD1_Q3

我的目标是只检索包含三个项目的项目集:

MTMR14_Q1   NOTCH1_Q3   PRKCD_Q1        
MTMR14_Q1   NOTCH1_Q3   TFRC_Q3 

我编写了以下代码,但它没有检索任何项集:

#!/usr/bin/perl -w

use strict;

my $input = shift @ARGV or die $!; 

open (FILE, "$input") or die $!;

while (<FILE>) 
    my $seq = $_;
    chomp $seq;
        
    if ($seq =~ /[A-Z]\t[A-Z]\t[A-Z]/)   
        #using the binding operator to match a string to a regular expression
    
        print $seq . "\n";
    


close FILE;

能否请您指出我的错误?

【问题讨论】:

您只匹配单个大写字符,没有重复、空格或_ 匹配一个或多个字符,/^[^\t]+\t[^\t]+\t[^\t]+$/ 一个衬垫:awk 'NF == 3' input.tsvperl -lane 'print if @F == 3' input.tsv @Shawn 那些在空格上拆分,而不是在制表符上。我不知道如何调整 awk 的,但是 Perl 的可以通过添加 -F'\t' 来修复 @ikegami 我把它省略了,因为它与 OP 的样本数据没有区别。 (猜猜 perl 是从什么语言/程序提升 -F 的?) 【参考方案1】:

[A-Z] 匹配单个字母。


跳过不完全包含 3 个字段的行:

next if $seq !~ /^ [^\t]* \t [^\t]* \t [^\t]* \z/x;

[^\t]* 匹配任意数量的非制表符。


跳过不包含正好 3 个非空字段的行:

next if $seq !~ /^ [^\t]+ \t [^\t]+ \t [^\t]+ \z/x;

[^\t]+ 匹配任何一个或多个非制表符。


大概,您将通过解析这些行来获取三个字段。如果是这样,您可以先解析然后检查,如下所示:

my @fields = split /\t/, $seq, -1;

next if @fields != 3;                    # Require exactly 3 fields.

next if ( grep length, @fields ) != 3;   # Requite exactly 3 non-empty fields.

【讨论】:

我应该使用 \d 还是 [0-9] 来匹配 Perl 正则表达式中的数字?

】我应该使用\\\\d还是[0-9]来匹配Perl正则表达式中的数字?【英文标题】:ShouldIuse\\dor[0-9]tomatchdigitsinaPerlregex?我应该使用\\d还是[0-9]来匹配Perl正则表达式中的数字?【发布时间】:2010-10-2719:15:06【问题描述】:在过去几周阅读了... 查看详情

Perl:转义字符串中的特殊字符以匹配正则表达式

】Perl:转义字符串中的特殊字符以匹配正则表达式【英文标题】:Perl:Escapespecialcharsinastringtomatcharegex【发布时间】:2014-12-1305:47:51【问题描述】:我正在编写bash函数来处理带有正则表达式的字符串操作。Bash内置函数在工作上很... 查看详情

如何匹配 perl 正则表达式 (regexp) 中的重音字符和波浪字符?

】如何匹配perl正则表达式(regexp)中的重音字符和波浪字符?【英文标题】:Howdoyoumatchaccentedandtildecharactersinaperlregularexpression(regexp)?【发布时间】:2011-07-0615:23:47【问题描述】:用户输入一组带有重音符号和波浪线的名称:RenatoNú... 查看详情

Perl 正则表达式多行匹配没有点

】Perl正则表达式多行匹配没有点【英文标题】:Perlregexmultilinematchwithoutdot【发布时间】:2016-05-2413:53:08【问题描述】:关于如何在Perl中执行多行正则表达式有很多问题。他们中的大多数都提到了使点匹配换行符的s开关。但是,... 查看详情

正则表达式中的 perl 正则表达式

】正则表达式中的perl正则表达式【英文标题】:perlregexwithinaregex【发布时间】:2012-06-2900:14:25【问题描述】:在perl中有很多次我想在匹配的另一个替换运算符完成后用它自己替换匹配的字符串。例如,我有一个应用程序,我需... 查看详情

更改 Perl 中的默认正则表达式行为?

】更改Perl中的默认正则表达式行为?【英文标题】:ChangedefaultregexpbehaviorinPerl?【发布时间】:2016-07-0519:15:23【问题描述】:Perl中是否有一些可用的全局选项指定默认行为正则表达式匹配行为?就像默认情况下忽略大小写一样,... 查看详情

perl模糊匹配文件名

...查找满足特定模式的文件名。Perl模糊匹配可以使用正则表达式(RegularExpression)来实现,以及Perl的glob函数。正则表达式是一种文本模式匹配的工具,它使用特殊的字符串模式来定义文本的结构,使用可以更快更有效地查找符合... 查看详情

perl之正则表达式(简)

正则表达式,简单介绍:元字符匹配项字符类:单字符与数字 .匹配除换行符之外的任意字符[a-z0-9]匹配集中任意单字符[^a-z0-9]匹配不在集合中的任意单字符\d匹配单个数字\D匹配非数字字符,等效于[^0-9]\w匹配数字型的(字)... 查看详情

perl学习模式匹配与正则表达式

一:模式匹配中的特殊字符1:  点号.    匹配任何单个字符(换行符\n除外)2:  反斜线\    转义字符,用于特殊符号前,使其失去特殊字符的作用变成普通字符3:  +    匹配该字符前面的字符(单个)... 查看详情

Perl 正则表达式匹配大型 Unicode 代码点

】Perl正则表达式匹配大型Unicode代码点【英文标题】:PerlregularexpressionmatchingonlargeUnicodecodepoints【发布时间】:2012-09-2217:52:00【问题描述】:我正在尝试用单引号或双引号替换各种字符。这是我的测试文件:#Replaceallwithdoublequotes... 查看详情

perl多个正则表达式匹配多行(代码片段)

我正在努力尝试在文本文件中的一组行中捕获多个匹配项。数据采用了一堆形式AO22_X1N_A9PP96CTS_C24SYN_INC_187(.A0(test_so6),.AA1(n2218),.B0(U_PAUSEdata_ff_int_28_),.B1(n2),.Y(n2597));NAND3_X1R_A9PP96CTUL_C16SYN_INC_154(.A(n1563),.B(U_PAUSE... 查看详情

perl学习正则表达式

模式分组:/fred+/会匹配freddd这样的/(fred)+/会匹配fredfredfred这样的/(fred)*/则会匹配abcdef任意的圆括号同时也使得重新使用某些字符串成为可能。反向引用来引用圆括号中的模式所匹配的文字,这个行为我们称为捕获组。反向行为... 查看详情

如何使用 Perl 中的正则表达式匹配字符串中第 n 个索引处的字符/字母/符号/数字

】如何使用Perl中的正则表达式匹配字符串中第n个索引处的字符/字母/符号/数字【英文标题】:Howtomatchcharacter/letter/symbol/digitatnthindexinastringusingregexinPerl【发布时间】:2022-01-1712:15:10【问题描述】:我试图使用正则表达式匹配第n... 查看详情

Perl 中的正则表达式组:如何从正则表达式组中捕获与字符串中出现的未知数量/多个/变量匹配的元素到数组中?

】Perl中的正则表达式组:如何从正则表达式组中捕获与字符串中出现的未知数量/多个/变量匹配的元素到数组中?【英文标题】:RegexGroupinPerl:howtocaptureelementsintoarrayfromregexgroupthatmatchesunknownnumberof/multiple/variableoccurrencesfromastring?... 查看详情

Perl 正则表达式匹配分隔字符串

】Perl正则表达式匹配分隔字符串【英文标题】:PerlRegexmatchdelimitedstring【发布时间】:2018-02-1614:35:46【问题描述】:在我的一生中,我无法用Perl语法来解决这个问题。我已经设法让这种风格在Javascript中工作,其中N是匹配号。^(?... 查看详情

perl正则表达式例子

Perl正则表达式一、介绍  正则表达式各语言都有自己的规范,但是基本都差不多,都是由元字符的组合来进行匹配;由于Nmap内嵌的服务与版本探测是使用的Perl正则规范,因此此篇博客记录一下Perl正则的相关内容,方便后期... 查看详情

perl语言(代码片段)

...$MATCH上一次成功匹配的字符=~匹配!~不匹配m/str/或/str/正则表达式,看是否含有字符串str<,>,>>代表读取、写入、追加    查看详情

老男孩带你了解perl正则表达式中的零宽断言

1.1 前言本文只介绍perl语言正则表达式的零宽断言功能。零宽断言实质:匹配文本里面的位置。零宽断言叫zero-lengthassertions,也叫lookaround(这个更容易理解)。包括:lookahead(向前看,零宽度正预测先行断言),lookbehind(向... 查看详情