RegEx:逗号分隔的复杂组

时间:2017-09-16 19:14:32

标签: python regex python-3.x

假设我有逗号分隔的行:

aa,bb,cc

我可以使用正则表达式(不是很好,因为这也匹配,aa但这不是问题):

(<my pattern>)?(,<my pattern>)*

E.g。

([a-zA-Z]*)?(,[a-zA-Z]*)*

现在,假设<my pattern> 非常长且复杂,如果我能说出类似的话会很好:

(<my pattern>)?(,<repeat previous/named group>)*  

有没有办法说重复某个组(名称)(在Python 3.5中)

2 个答案:

答案 0 :(得分:0)

我担心regex中不存在这样的语法糖,但考虑到python使用字符串进行正则表达式,你可以简单地使用字符串格式来减少你的代码:

    #!C:/Strawberry/perl
    open(FILE, "<test.txt") || die "File not found";
    my @lines = <FILE>;
    close(FILE);
    my $string = '<g
    id=';
    my $string2 = '<g
    <g'; 
    my $anything = ".*";

    my $replace = 'gg';
    my @newlines;
    my $counter = 1;

    foreach(@lines) {
      $_ =~ s/\Qstring$anything\Q$string2/$string$replace$string2$counter/g;
      $counter++;
      push(@newlines,$_);
    }

    open(FILE, ">test.txt") || die "File not found";
    print FILE @newlines;
    close(FILE);

答案 1 :(得分:0)

有正则表达式引擎支持这种反向引用,但Python的正则表达式引擎却没有。

然而,仅仅因为正则表达式引擎没有内置支持这并不意味着我们无法构建实现我们目标的正则表达式模式。我们所要做的就是更改正则表达式中的, - 而不是查找逗号,我们希望允许逗号作为字符串的开头:

((?:,|^)[a-zA-Z]*)*