Perl正则表达式提取多个条件的字符串部分

时间:2010-04-14 11:06:29

标签: regex perl

什么是使我能够捕获的单一正则表达式 are genesis gene之后的所有文字 从这篇文章

The closest human genes of best are genes A B C
The closest human gene of best is gene A 

因此,我希望提取包含

$1
A B C
A 

试过这个却失败了:

$line =~ /The closest .* gene[s] (.*)$/;

5 个答案:

答案 0 :(得分:4)

$line =~ /The closest .* genes? (.*)$/;

答案 1 :(得分:3)

我认为最明确的是:

$line =~ m/best \s (?:is \s gene|are \s genes) \s ([\p{IsUpper}](?: \s [\p{IsUpper} ])*)/x;

当然,如果您知道所有句子都是语法,那么您可以执行(?:are|is)事。如果你知道你只有基因A-N或其他东西,你可以忘记\p{IsUpper}并使用[A-N]

答案 2 :(得分:2)

$ perl -F/genes*/ -ane 'print $F[-1];' file
 A B C
 A

答案 3 :(得分:2)

在开始时使用非贪婪来减少意外的机会。使用非捕获的parens来组合您不关心的替代方案。将?附加到字母以使其可选。因此,试试这个:

$line =~ /The closest .*? (?:is|are) genes? (.*)$/;

要知道你哪里出错了BTW,只需将上述内容与你最初尝试的内容进行比较。

答案 4 :(得分:0)

根据其他建议,我建议您查看perllre for Regular Expressions