簡體   English   中英

Perl正則表達式提取具有多個條件的字符串部分

[英]Perl regex extract parts of string with multiple condition

使我能夠捕獲所有后面的文本的單一正則表達式are genes並且is gene該文本中的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] (.*)$/;
$line =~ /The closest .* genes? (.*)$/;

我認為最明確的是:

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

當然,如果您知道所有句子都將是語法的,那么您可以做(?:are|is)事情。 而且,如果您知道僅將擁有AN或其他基因,則可以忘記\\p{IsUpper}並使用[AN]

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

在開始時使用非貪婪可減少出現意外的機會。 使用不捕獲的括號將您不關心的替代項分組。 追加? 一封信以使其可選。 因此,請嘗試以下操作:

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

要查看BTW出了什么問題,只需將以上內容與您最初嘗試的內容進行比較。

結合其他建議,我想建議您看一下正則表達式的特點

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM