【问题标题】:how to check multiple substring in a string in perl如何在perl中检查字符串中的多个子字符串
【发布时间】:2013-11-11 06:25:07
【问题描述】:

我有一个输入文件,我正在读入一个哈希表,输入文件如下

MANAGEMENT=IDL
NORTH=IDL,NORTHERN||VIDL,NORTH||IDL,NORTH
SOUTH=IDL,SOUTHERN||CIDL,SOUTH

现在对于每个键,我必须检查另一个字符串说实例(这也是一个字符串)是否包含值,即 NORTH

Condition= TRUE if 
$instance contains (IDL AND NORTHERN) OR (VIDL AND NORTH) OR (IDL AND NORTH)

请注意,Value 可以有很多这样的 OR 条件

我有这样 15000 个实例,我必须比较每个值,所以需要一个快速的方法。

我正在考虑将值传递给一个函数,该函数将返回一个正则表达式,我可以对其进行检查但无法想到任何此类(我是 perl 中的新蜜蜂)

感谢任何帮助或更好的建议

【问题讨论】:

  • 对不起,我编辑它是 NORTH; perl 中相当新,所以我想看看是否有一些我可以使用的快速方法。
  • @mpapec $instance 是一个字符串
  • 不,它包含我上面写的;详细说明($instance 包含 IDL AND $instance 包含 NORTHERN)或($instance 包含 IDL AND $instance 包含 NORTH)
  • 听起来你可以有除示例之外的其他规则;这些是什么格式的?你每次运行程序只使用一个规则吗?还有哪些其他实际的规则示例?根据规则,您实际上希望发生什么?例如您是要查找规则为真的所有行,还是将这些行划分为真或假的行,或者只是用行输出规则的结果?
  • @ysth 我正在尝试识别规则为真的实例。格式相同,只是值可以是由 || 分隔的任何内容。条件。如果实例(我要比较的字符串)同时匹配第一个键和第二个键,我将采用第二个键,但我在此函数中使用 HASHMAP 实现了这一点,我只想识别与这些单独规则中的每一个匹配的那些并添加那些传递给哈希映射。

标签: perl


【解决方案1】:

也许您可以为您的索引构建多个哈希映射。也就是说,构建%IDL%NORTH%NORTHERN。在每个哈希映射中,如果字符串包含适当的子字符串,则会出现一个字符串。这样,您对字符串 $s 的评估变为:

$IDL{$s} && $NORTHERN{$s} || $IDL{$s} && $NORTH{$s}

当然这个条件可以简写为:

$IDL{$s} && ($NORTHERN{$s} || $NORTH{$s})

【讨论】:

    【解决方案2】:

    从我这里讲的很少,我会说你可以做到:

    if ( $instance =~ /(?=.*idl)(?=.*north(?:ern)?/ ) {
        print "$instance\n";
    }
    

    在上面的代码中,我使用了前瞻断言。它的意思是匹配任何同时包含 IDL 和 NORTHERN 的行。

    【讨论】:

    • 非常感谢@user847388,但这只是一个可以更改的示例,我也可以有多个 OR 条件或没有 OR 条件。
    猜你喜欢
    • 2016-06-24
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 2019-07-14
    相关资源
    最近更新 更多