正则表达式在条件下解析多个文本



提到的字符串
$string1 = "Job Description : Advt.No.01/2019-FCI Category IIIJunior Engineer /Assistant recruitment in Food Corporation of India (FCI) FCI recruiting 4103 Vacancies f...";
$string2 = "Job Description : Assistant Professor (Management) job recruitment in Saurashtra University on contract basis No. of Post : 01 Eligibility :  As per ...";

上面的字符串可能是文本中的一次

  1. 案例:我需要解析帖子或空缺价值的否。假设如果我找到空缺关键字,那么我需要将数字值接近空缺。
  2. 案例:假设如果现在在字符串中找不到空缺,那么我需要在帖子数字上进行搜索,并在附近找到数字值。

所以,我如何为其编写正则表达式。我有两个正则表达

$string2 =~ m/(?:pos.*?)s+(d+)s+/ig;
print $1;
$string1 =~ m/(d+)s+(?:vac.*?)/ig;
print $2;

我需要写一个正则表达式以在两种情况下起作用。那么,如何继续?

此正则应该有效:

/(d+ vacancies|no. of post : d+)/ig

虽然当然可以将其挤入一个不可读的正则表达集团,但分裂和征服可能是更好的策略。我的解决方案提出了两个可能的替代方案。

当然,您可以根据现实生活中的输入放松或拧紧言论。

#!/usr/bin/perl
use warnings;
use strict;
my $string1 = "Job Description : Advt.No.01/2019-FCI Category IIIJunior Engineer /Assistant recruitment in Food Corporation of India (FCI) FCI recruiting 4103 Vacancies f...";
my $string2 = "Job Description : Assistant Professor (Management) job recruitment in Saurashtra University on contract basis No. of Post : 01 Eligibility :  As per ...";
# alternative 1
foreach my $string ($string1, $string2) {
    $string =~ /(d+)s+vacancies/i    ||
    $string =~ /no. of post : (d+)/i
        or die "no match for '${string}'n";
    print "MATCH: $1n";
}
# alternative 2
foreach my $string ($string1, $string2) {
    my($submatch) = $string =~ /(d+s+vacancies|no. of post : d+)/i
        or die "no match for '${string}'n";
    my($number) = $submatch =~ /(d+)/;
    print "MATCH: ${number}n";
}

exit 0;

测试输出:

$ perl dummy.pl
MATCH: 4103
MATCH: 01
MATCH: 4103
MATCH: 01

您可以这样使用,我将您的正则正则与|和使用的(?| )结合在一起,以获取$1

中的所有匹配项
$string=~m/(?|(?:pos.*?)s+(d+)s+|(d+)s+(?:vac.*?))/ig;
print $1,"n";

最新更新