Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Perl:删除不以模式开头的字符串_Regex_Perl - Fatal编程技术网

Regex Perl:删除不以模式开头的字符串

Regex Perl:删除不以模式开头的字符串,regex,perl,Regex,Perl,我有以下意见: NP_001239382 1002 A G NP_001074602 1005 A V NP_001230039 100 A V NP_932785 100 A V NP_001164038 1018 A S 想用某种正则表达式把它变成这样: NP_001239382 NP_001074602 NP_001230039 NP_932785 NP_001164038 本质上,约束是“如果字符串不是以'NP'开头,则删除该字符串”,但我不确定如何执行此操作。相当简单: s/(?:

我有以下意见:

NP_001239382 1002 A G
NP_001074602 1005 A V
NP_001230039 100 A V
NP_932785 100 A V
NP_001164038 1018 A S
想用某种正则表达式把它变成这样:

NP_001239382
NP_001074602
NP_001230039
NP_932785
NP_001164038
本质上,约束是“如果字符串不是以'NP'开头,则删除该字符串”,但我不确定如何执行此操作。

相当简单:

s/(?:\s++|(?<!\S))(?!NP)\S++//;
s/(?:\s++|)(?)?
不过,如果你能更多地说明这个问题,这会有所帮助;这些行是在一个文件中还是在一个数组中?都在一个字符串中

这将消除不以NP开头的非空白字符,以及任何前面的空白(如果没有,请确保这不是NP字符串的中间部分)。

相当简单:

s/(?:\s++|(?<!\S))(?!NP)\S++//;
s/(?:\s++|)(?)?
不过,如果你能更多地说明这个问题,这会有所帮助;这些行是在一个文件中还是在一个数组中?都在一个字符串中

这将消除不以NP开头的非空白字符,以及任何前面的空白(如果没有,请确保这不是NP字符串的中间部分)。

相当简单:

s/(?:\s++|(?<!\S))(?!NP)\S++//;
s/(?:\s++|)(?)?
不过,如果你能更多地说明这个问题,这会有所帮助;这些行是在一个文件中还是在一个数组中?都在一个字符串中

这将消除不以NP开头的非空白字符,以及任何前面的空白(如果没有,请确保这不是NP字符串的中间部分)。

相当简单:

s/(?:\s++|(?<!\S))(?!NP)\S++//;
s/(?:\s++|)(?)?
不过,如果你能更多地说明这个问题,这会有所帮助;这些行是在一个文件中还是在一个数组中?都在一个字符串中


这将消除不以NP开头的非空白字符,以及任何前面的空白(确保这不是NP字符串的中间,如果没有任何空白)。

我将此作为注释发布,但由于这是soosus一直在寻找的,因此我将其作为答案发布

在这种情况下,我们不必匹配和删除不以NP开头的单词。因为我们需要的所有字符串都是该行的第一个单词,所以我们只需要删除之后的所有内容。我们可以使用以下一行:

perl -ple 's/[ \t].*//' input.txt > output.txt

它删除了每行后面的所有内容,包括第一个空格或制表符,给我们留下了所需的字符串。

我将此作为注释发布,但由于它是soosus想要的,所以我将其作为答案发布

在这种情况下,我们不必匹配和删除不以NP开头的单词。因为我们需要的所有字符串都是该行的第一个单词,所以我们只需要删除之后的所有内容。我们可以使用以下一行:

perl -ple 's/[ \t].*//' input.txt > output.txt

它删除了每行后面的所有内容,包括第一个空格或制表符,给我们留下了所需的字符串。

我将此作为注释发布,但由于它是soosus想要的,所以我将其作为答案发布

在这种情况下,我们不必匹配和删除不以NP开头的单词。因为我们需要的所有字符串都是该行的第一个单词,所以我们只需要删除之后的所有内容。我们可以使用以下一行:

perl -ple 's/[ \t].*//' input.txt > output.txt

它删除了每行后面的所有内容,包括第一个空格或制表符,给我们留下了所需的字符串。

我将此作为注释发布,但由于它是soosus想要的,所以我将其作为答案发布

在这种情况下,我们不必匹配和删除不以NP开头的单词。因为我们需要的所有字符串都是该行的第一个单词,所以我们只需要删除之后的所有内容。我们可以使用以下一行:

perl -ple 's/[ \t].*//' input.txt > output.txt

它删除了每行后面的所有内容,包括第一个空格或制表符,给我们留下了所需的字符串。

好吧,如果你知道Perl(我不知道),你应该能够在没有DOTALL的情况下运行
^NP[0-9]+
的正则表达式测试。试试
Perl-nle的/[\t]+.*$/;print;'input.txt>output.txt
删除后面的所有内容,包括第一个空格。谢谢@Matt!这就是我所需要的。如果你懂Perl(我不懂),你应该可以在没有DOTALL的情况下为
^NP[0-9]+
运行正则表达式测试。试试
Perl-nle的/[\t]+.*$/;print;'input.txt>output.txt
删除后面的所有内容,包括第一个空格。谢谢@Matt!这就是我所需要的。如果你懂Perl(我不懂),你应该可以在没有DOTALL的情况下为
^NP[0-9]+
运行正则表达式测试。试试
Perl-nle的/[\t]+.*$/;print;'input.txt>output.txt
删除后面的所有内容,包括第一个空格。谢谢@Matt!这就是我所需要的。如果你懂Perl(我不懂),你应该可以在没有DOTALL的情况下为
^NP[0-9]+
运行正则表达式测试。试试
Perl-nle的/[\t]+.*$/;print;'input.txt>output.txt
删除后面的所有内容,包括第一个空格。谢谢@Matt!这就是我所需要的。输入是在一个文件中,它将是逐行输入。在bash中是这样的:$cat testseq.txt | perl-ne'{while(){$line=$\u;$line=~s/(?:\s++|(?输入在一个文件中,它将是逐行输入。它在bash中看起来是这样的:$cat testseq.txt | perl-ne'{while(){$line=$\u;$line=~s/(?:\s++)(?输入在一个文件中,它将是逐行输入。它在bash中看起来是这样的:$cat testseq.txt | perl-ne'{while(){$line=$\uz;$line=$line=$line=~s/(?:\s)++|(?输入在一个文件中,它将是逐行输入。在bash中类似于:$cat testseq.txt | perl-ne'{while(){$line=$\u;$line=~s/(?:\s++|)(?)?