regex python:错误:无法匹配的组

时间:2013-05-30 17:04:19

标签: regex python-2.7

我是python的新手,使用regex()时出现问题。我有一个父目录和一个子目录。

I'm using the regex(r'(.*/)?(.+/)(.+)\.bam') 

匹配文件,并在子目录中显示前缀'.bam'。一个函数利用regex(),执行一些任务并给出输出,我需要将输出写入父目录。

这是我想要做的总功能。

func(task,regex(r'(.*/)?(.+/)(.+)\.bam'),r'\1\3.output')

'。output'是要添加到输出的后缀,它显示错误“error:unmatched group”。有人可以帮忙解决这个问题吗?或提供一种优雅的方式来做到这一点?

1 个答案:

答案 0 :(得分:1)

描述

此表达式将提取文件名,文件路径和当前文件夹的父路径。

((.*[\/])[^\/]*[\/])([^\/]*?)[.]bam

enter image description here

  • (启动捕获组1
  • (启动捕获组2
  • .*[\/]贪婪地匹配整个字符串...
  • )关闭捕获组2
  • [^\/]*[\/]需要当前目录
  • )关闭捕获组1
  • (启动捕获组3
  • [^\/]*?非贪婪地匹配所有非/字符...
  • )关闭捕获组3
  • [.]需要点字符
  • bam需要bam值

组0获取整个字符串

  1. 获取当前路径
  2. 获取此文件夹的父级
  3. 获取带有.bam扩展名
  4. 的文件名

    实施例

    我不太了解python,所以这里有一个PHP示例来说明这个正则表达式是如何工作的。

    $sourcestring="/ParentFolder1/SubFolder1/FileFoobar1.bam
    /Some/Really/Deep/Folder/ParentFolder2/SubFolder2/FileFoobar2.bam";
    preg_match_all('/((.*[\/])[^\/]*[\/])([^\/]*?)[.]bam/im',$sourcestring,$matches);
    echo "<pre>".print_r($matches,true);
    
    $matches Array:
    (
        [0] => Array
            (
                [0] => /ParentFolder1/SubFolder1/FileFoobar1.bam
                [1] => /Some/Really/Deep/Folder/ParentFolder2/SubFolder2/FileFoobar2.bam
            )
    
        [1] => Array
            (
                [0] => /ParentFolder1/SubFolder1/
                [1] => /Some/Really/Deep/Folder/ParentFolder2/SubFolder2/
            )
    
        [2] => Array
            (
                [0] => /ParentFolder1/
                [1] => /Some/Really/Deep/Folder/ParentFolder2/
            )
    
        [3] => Array
            (
                [0] => FileFoobar1
                [1] => FileFoobar2
            )
    
    )