我有这个输入:
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'开头”,但我不确定如何做到这一点。
答案 0 :(得分:3)
我发布此评论作为评论,但因为所有soosus都在寻找我会发布它作为答案。
在这种情况下,我们不必匹配和删除不以NP开头的单词。由于我们想要的所有字符串都是该行的第一个单词,因此我们只需要删除所有内容。我们可以用这个单行代码来做到这一点:
perl -ple 's/[ \t].*//' input.txt > output.txt
它删除每行之后的所有内容,包括每行的第一个空格或制表符,为我们留下所需的字符串。
答案 1 :(得分:0)
相当简单:
s/(?:\s++|(?<!\S))(?!NP)\S++//;
虽然如果你要更多地谈论这个问题会有所帮助;这些行是在文件中吗?数组?一起在一个字符串中?
这消除了不启动NP的非空白字符以及任何前面的空格(如果没有,则确保这不是NP字符串的中间位置。)