在perl脚本中将正则表达式与关键字匹配

时间:2017-12-04 04:33:19

标签: regex perl

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

有人可以通过这种方式做任何经验,并提供建议。

1 个答案:

答案 0 :(得分:2)

(?:(?!STRING).)*STRING[^CHAR]*CHAR

我想你想要

if ($string =~ /(Mr\.\s+(\w+)\s+MBBS(?:(?!MBBS).)*\s+practitioner\s+)/si) {
    print "$1\n";
}

您可以添加到(?:(?!MBBS).)*的内部部分。例如,您可能更喜欢(?:(?!Mr\.|MBBS).)*