python - 正则表达式中重复限定符被忽略

标签 python regex perl

我被困在构建带有重复限定符的正则表达式上。没有运气在网上找到一条建议。

这是一个要匹配的字符串 -

abc cde fgi

正则表达式是

^(?:(.*?)(abc|fgi)){2}(.*)$

以下是 redemo.py 的示例输出:

the way how the regex matches the string

我从 Perl 得到的类似输出:

perl --version | head -2; perl -MData::Dumper -e 'print Dumper ["abc cde fgi" =~ /^(?:(.*?)(abc|fgi)){2}(.*)$/g]'

This is perl 5, version 14, subversion 4 (v5.14.4) built for cygwin-thread-multi
$VAR1 = [
          ' cde ',
          'fgi',
          ''
        ];

我最好留下范围的原因,为什么我必须应用这个正则表达式。

但问题是:我希望 '{2}' 限定符是匹配字符串的严格要求,因此解释器将返回 5 组成功匹配 -

1: ''
2: 'abc'
3: ' '
4: 'fgi'
5: ''

出乎意料的是,解释器只返回 3 个组就可以了,看起来“{2}”限定符被忽略了。

如果我对正则表达式重复限定符的理解是错误的,有人可以发表评论吗?

任何人都可以建议一个工具来可视化正则表达式如何逐步解释吗?

谢谢

最佳答案

您已在正则表达式中包含 {2},但尚未将其包含在匹配组中。这意味着在计算是否存在匹配时会评估重复条件,但在计算促成匹配的组时不会评估重复条件。相反,您会得到匹配两次的组的一次重复。要将两个重复项分配给一组内容,请在该组的 () 中包含 {2}

请注意,分配的组数永远不会多于输入中的文字对()。要获得组中的各个重复项,您必须编写一个循环并重复匹配(或者在 Perl 中,通过其 e 标志在正则表达式中包含代码)。

关于python - 正则表达式中重复限定符被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24906723/

相关文章:

python - 如何找到 2 的一个非常大的数模 10^9 的幂

python - 格式化 Pandas groupby() 以进行合并

正则表达式过滤结果sqlite

arrays - 通过在值中分配一个数组在哈希中添加键值对=>不能将未定义的值用作ARRAY引用

python - 更改 Click 的默认帮助选项的方法?

java - 模式匹配的烦恼

python - 在 Python 中使用正则表达式确定字符串的不匹配部分

perl - 不清楚的perl脚本执行

perl - Storable 模块是做什么用的?

python - 在python中找到图像中每个框的均值