perl regex在文本内容中使用非常强大,遗憾的是我通过错误的匹配得不到我对代码所期望的输出。
在这场比赛中,我们与MBBS和关键字n
匹配practitioner
。
示例输入:
示例文本 - 先前行为对从业者当前作物损失没有统计学上显着的直接影响,由Srivatsan MBBS M.D.先生记录作物损失量。第三,虽然我们覆盖了一个数字,并由 先生给出。 Sankaranarayan MBBS可能解释了从业者如何确定作物损失的从业者 ,可能存在其他未观察到的,随时间变化的家庭特征,这些特征会影响家庭是否经历作物损失。如果是这种情况,从作物损失到生育决定的因果关系可能不成立。
我的代码:
my $txtfile = "sample.txt";
readFileinString($txtfile, \$string);
my $keyword = "practitioner";
if($string=~m/Mr.\s+(\w+)\s+MBBS(.*?)\s+practitioner\s+/i)
{
print "$&\n";
}
代码输出:
Mr. Srivatsan MBBS M.D. log of amount of crop loss. Third, although we cover a number and given by Mr. Sankaranarayan MBBS possible explanations for what practitioner
预期输出:
Mr. Sankaranarayan MBBS possible explanations for what practitioner determines practitioner
有人可以通过这种方式做任何经验,并提供建议。
答案 0 :(得分:2)
(?:(?!STRING).)*
是STRING
,[^CHAR]*
是CHAR
。
我想你想要
if ($string =~ /(Mr\.\s+(\w+)\s+MBBS(?:(?!MBBS).)*\s+practitioner\s+)/si) {
print "$1\n";
}
您可以添加到(?:(?!MBBS).)*
的内部部分。例如,您可能更喜欢(?:(?!Mr\.|MBBS).)*
。