如何仅在字符串的前两个出现之间提取文本?

时间:2015-08-02 19:59:52

标签: regex perl

我对计算机编程很陌生,我正在尝试编写一个脚本,该脚本将大型fasta文件中的第一个和第二个>符号之间的所有文本都输出,并将其输出到另一个文件中。我真正需要回答的问题是,如果有一个正则表达式命令,只允许我将文本放在文件中第一个和第二个>符号之间。

我在网上找到了很多关于在两个字符串之间取文字的内容,但是当我们在文件中多次出现这些字符串的第一次和第二次出现时,我没有找到任何地方。我正在运行perl版本5.010。

2 个答案:

答案 0 :(得分:3)

似乎很容易:/>([^>]*)>/

说明:

正则表达式总是找到第一个(最左边)匹配,因此第一个>很容易。 "查找下一个>"的所有文字。相当于"找到所有以下非>个字符",这是我们从[^>]*获取的地方。

parens ( )用于捕获$1中匹配的文字。

答案 1 :(得分:3)

默认情况下,正则表达式是贪婪的,这意味着regexp将尝试匹配尽可能多的文本。为避免这种情况,您可以指定不应出现在>之间的符号。和>,因为它被提议:

>([^>]*)>/

或者您可以通过添加将regexp引擎切换到延迟模式?量词:

>(.*?)>

>(.+?)>

Regexp更简单,结果相同。

所以:

if ($content =~ m/>(.*?)>/gs) {
    print "Captured: $1"
}