如何计算以下字符串中空'字段'的数量?空字段以表示-|或|-|或|-
我已经熟了的正则表达式看来除非我有连续的空场是工作?我如何减少贪心?
my $string = 'P|CHNA|string-string|-|-|25.75|-|2562000|-0.06';
my $count = () = ($string=~/(?:^-\||\|-$|\|-\|)/g);
printf("$count\n");
Run Code Online (Sandbox Code Playgroud)
上面的代码打印2而不是我想要的3.
我完全避免使用正则表达式路由,而是将其视为列表,因为它是一个:
my $count = grep { /^-$/ } split /\|/, $string;
Run Code Online (Sandbox Code Playgroud)
诀窍是使用环视。有人的第一次尝试可能如下:
my $count = () = $string =~ /
(?<\|) # Preceded by "|"
(-)
(?=\|) # Followed by "|"
/xg;
Run Code Online (Sandbox Code Playgroud)
但这是行不通的。上面的问题是它没有检测第一个字段或最后一个字段是否为空。有两种方法可以解决这个问题:
my $count = () = "|$string|" =~ /
(?<\|) # Preceded by "|"
(-)
(?=\|) # Followed by "|"
/xg;
Run Code Online (Sandbox Code Playgroud)
或者
my $count = () = $string =~ /
(?<![^|]) # Not preceded by a char other than "|"
(-)
(?![^|]) # Not followed by a char other than "|"
/xg;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
275 次 |
| 最近记录: |