0

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

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

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

这是我想要做的全部功能。

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

'.output' 是要添加到输出的后缀,它显示错误“错误:不匹配的组”。任何人都可以帮助解决这个问题吗?或提供一种优雅的方式来做到这一点?

4

1 回答 1

1

描述

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

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

在此处输入图像描述

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

团体

第 0 组获取整个字符串

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

例子

我不太了解 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
        )

)
于 2013-05-30T18:53:20.640 回答