我想用正则表达式捕获两组特定的双下划线之间的字符串。捕获的字符串本身可能有一个下划线。下面是我一直在使用的测试Perl脚本:
#!/usr/bin/env perl
use strict;
my $str = "DFD_20220913_121409_strix1a0__z1_erx_adm__CL1695331__RTL_Dfdsg4__regression__df_umc_nbio_hubs_gfx__220913_150718";
(my $grp) = $str =~ /CL\d+\_\_(\w+)\_\_/;
print "grp = $grp\n";
exit;
这会传回...
grp = RTL_Dfdsg4__regression__df_umc_nbio_hubs_gfx
我想要...
grp = RTL_Dfdsg4
正如您所看到的,我知道第一组双下划线的位置(在CL\d+
之后),但是由于某种原因,regexp读取下一个双下划线,直到它遇到最后一组双下划线。
2条答案
按热度按时间g6baxovj1#
您需要使用非贪婪量词
?
。我删除了下划线前面不必要的反斜杠。
ffvjumwh2#
请注意,使用non-greedy修饰符是脆弱的,很容易产生与预期不同的效果。这是一个健壮的替代方法: