我一直在思考这个问题很长一段时间,但仍然无法弄明白。正则表达式向前/向后看。无论如何,我不确定在我的情况下使用哪个,我仍然无法理解这个概念。我举个例子。
我有一个名字.... My Business,LLC(密尔沃基,威斯康星州)_12345678_12345678
我想要做的是,如果名称中有逗号,无论有多少,请将其删除。同时,如果名称中没有逗号,仍然读取该行。我所拥有的单线程列表如下。
s/(.*?)(_)(\d+_)(\d+$)/$1$2$3$4/gi;
我想从$ 1(My Business,LLC(密尔沃基,威斯康星州))删除任何逗号。我可以将正则表达式中的逗号称为文字字符串((。?),(。?),(。*?)(_。*?$))如果每次都是这种确切的情况但事实并非如此。
我希望它省略逗号并匹配“我的商家,LLC_12345678_12345678”或“我的商家_12345678_12345678”,即使没有逗号。 在任何情况下,我希望它匹配行,逗号与否,并删除任何逗号(如果有),无论多少或在哪里。
如果有人能帮助我理解这个概念,那将是一个突破!!
答案 0 :(得分:0)
使用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