我是python的新手,使用regex()时出现问题。我有一个父目录和一个子目录。
I'm using the regex(r'(.*/)?(.+/)(.+)\.bam')
匹配文件,并在子目录中显示前缀'.bam'。一个函数利用regex(),执行一些任务并给出输出,我需要将输出写入父目录。
这是我想要做的总功能。
func(task,regex(r'(.*/)?(.+/)(.+)\.bam'),r'\1\3.output')
'。output'是要添加到输出的后缀,它显示错误“error:unmatched group”。有人可以帮忙解决这个问题吗?或提供一种优雅的方式来做到这一点?
答案 0 :(得分:1)
此表达式将提取文件名,文件路径和当前文件夹的父路径。
((.*[\/])[^\/]*[\/])([^\/]*?)[.]bam
(
启动捕获组1 (
启动捕获组2 .*[\/]
贪婪地匹配整个字符串... )
关闭捕获组2 [^\/]*[\/]
需要当前目录)
关闭捕获组1 (
启动捕获组3 [^\/]*?
非贪婪地匹配所有非/
字符... )
关闭捕获组3 [.]
需要点字符bam
需要bam值组0获取整个字符串
.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
)
)