正则表达大师,
我不定期使用正则表达式,如果这是一个新手问题,请对不起。
我有这些示例字符串:
我需要这个输出:
car truck
1. 10 12
2. 2 1
3. 2 2
4. 1 0
5. 0 1
6. 2 0
7. 0 2
8. 2 2 (Ford pickup is a type of truck)
9. 13 10 (sedans is a type of car)
数字可以是任何整数。可以在一个正则表达式中完成吗? 如果没有,在我的情况下,可以进行多次通过。语言并不重要,我对正则表达式模式更感兴趣。
提前致谢。
答案 0 :(得分:1)
结合编程语言,您可以:
(?:(\d+)\s+(?:\bsedans?\b|\bcars?\b))|(?:(\d+)\s+(?:\bpickups?\b|\btrucks?\b))
这是一个用于演示的Perl脚本:
$ txt='"I have 10 cars & 12 trucks"
> "We own 2 cars & 1 truck"
> "2 cars & 2 trucks."
> "1 car"
> "1 truck"
> "2 cars"
> "2 trucks"
> "We have 1 pickup . Another 2 cars & 1 truck."
> "Bought 3 sedans. Another 10 trucks & 10 cars"'
$ echo "$txt" | perl -lne 'BEGIN{print "\tCars\tTrucks"}
$c+=$1 while(/(?:(\d+)\s+(?:\bsedans?\b|\bcars?\b))/g);
$t+=$1 while(/(?:(\d+)\s+(?:\bpickups?\b|\btrucks?\b))/g);
printf "%i\t%3i\t%10i\t%s\n", ++$i,$c,$t, $_;
$c=0; $t=0;'
打印:
Cars Trucks
1 10 12 "I have 10 cars & 12 trucks"
2 2 1 "We own 2 cars & 1 truck"
3 2 2 "2 cars & 2 trucks."
4 1 0 "1 car"
5 0 1 "1 truck"
6 2 0 "2 cars"
7 0 2 "2 trucks"
8 2 2 "We have 1 pickup . Another 2 cars & 1 truck."
9 13 10 "Bought 3 sedans. Another 10 trucks & 10 cars"