【问题标题】:use perl to extract a substring between two delimiters and store as a new string使用 perl 提取两个分隔符之间的子字符串并存储为新字符串
【发布时间】:2014-02-26 17:41:50
【问题描述】:

我正在编写一个 Perl 脚本,我想在两个不同的变量之间拆分一个字符串。

这是我的字符串

<p>Hello my server number is 1221.899999 , please select an option</p>

我希望能够提取服务器编号,所以我想在&lt;p&gt;Hello my server number is 之后和以下空格之前分割字符串,这样我的结束字符串将打印为

1221.899999

正则表达式是否是最好的解决方案,而不是使用拆分?

【问题讨论】:

    标签: perl


    【解决方案1】:

    我只会使用正则表达式。

    my $str = 'Hello my server number is 1221.899999 , please select an option';
    my ($num) = $str =~ /Hello my server number is (\d+\.\d+) ,/;
    

    如果匹配不成功,$num 将是未定义的。

    【讨论】:

    • $str =~ /你好我的服务器号是 (\S+) ,/;如果我得到一个服务器名称,例如“您好,我的服务器编号是 104/238,12.1,请选择一个选项”
    • @Aldo 的解决方案回答了我的问题 :)
    • @Nongo Aldo 的解决方案与数字不匹配,它会在is 之后抓取任何内容。在这种情况下,似乎更具体会更好。
    • 解决方案不会与数字匹配,但解决方案会提取数字。
    【解决方案2】:

    怎么样:

    $str = 'Hello my server number is 1221.899999 , please select an option';
    $str =~ s/^.*\b(\d+\.\d+)\b.*$/$1/;
    say $str;
    

    $str =~ s/^Hello my server number is (\d+\.\d+)\s.*$/$1/;
    

    如果字符串的开头总是那个。

    输出:

    1221.899999
    

    【讨论】:

      【解决方案3】:

      我会使用正则表达式。这个怎么样:

      $str = 'Hello my server number is 1221.899999 , please select an option';
      print $1 if $str =~ /is (.*) ,/;
      

      【讨论】:

      • 它不适用于句子:This is my server number 123.456 , yes it is
      • 对于特定情况,正则表达式为:/number (.*) ,/
      【解决方案4】:

      只要你确定逗号前总是有一个空格,正确的答案就是类似于这个

      my $string = '<p>Hello my server number is 1221.899999 , please select an option</p>';
      
      my ($server) = $string =~ /server number is (\S+)/;
      
      print $server;
      

      输出

      1221.899999
      

      如果逗号可能出现在服务器编号的末尾之后,那么您需要稍微修改一下

      my ($server) = $string =~ /server number is ([^\s,]+)/;
      

      【讨论】:

        猜你喜欢
        • 2016-02-10
        • 1970-01-01
        • 2012-04-27
        • 2015-08-01
        • 2019-04-20
        • 2014-12-08
        • 2020-05-20
        • 2013-01-31
        • 2013-12-11
        相关资源
        最近更新 更多