什么是使我能够捕获的单一正则表达式
are genes
和is 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] (.*)$/;
答案 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