【问题标题】:QRegex look ahead/look behind正则表达式向前看/向后看
【发布时间】:2014-03-28 15:33:21
【问题描述】:

我一直在思考这个问题,但仍然无法弄清楚。正则表达式向前/向后看。无论如何,我不确定在我的情况下使用哪个,我仍然无法理解这个概念。举个例子吧。

我有一个名字....My Business, LLC (Milwaukee,WI)_12345678_12345678

我想做的是,如果名称中有逗号,无论有多少,都将其删除。同时,如果名称中没有逗号,仍然读取该行。下面列出了我的单线。

s/(.*?)(_)(\d+_)(\d+$)/$1$2$3$4/gi;

我想从 $1(My Business,LLC (Milwaukee,WI)) 中删除任何逗号。如果每次都是这种情况,我可以将正则表达式中的逗号称为文字字符串((.?),(.?),(.*?)(_.*?$)) ,但事实并非如此。

我希望它省略逗号并匹配“My Business, LLC_12345678_12345678”或仅匹配“My Business_12345678_12345678”,即使没有逗号。 在任何情况下,我都希望它与行匹配,无论逗号与否,并删除任何逗号(如果有),无论有多少或在哪里。

如果有人能帮助我理解这个概念,那将是一个突破!

【问题讨论】:

    标签: regex lookahead lookbehind


    【解决方案1】:

    使用 Perl 的 /e 修饰符,以便您可以在 s/// 中的替换期间传递您的函数

    $str = 'My Business,LLC (Milwaukee,WI)_12345678_12345678';
    ## modified your regex as well using lookahead
    $str =~ s/(.*?)(?=_\d+_\d+$)/funct($1)/ge;
    print $str;
    
    sub funct{
        my $val = shift;
        ## replacing , with empty, use anything what you want!
        $val =~ s/,//g;
        return $val;
    }
    

    使用funct($1) 代替您基本上是调用带有参数$1 的funct() 函数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-26
      相关资源
      最近更新 更多