Python RE 目录和斜杠

Python RE Directories and slashes

假设我有一个字符串,它是已输入的根目录

'C:/Users/Me/'

然后我使用 os.listdir() 并加入它来创建子目录列表。

我最终得到如下所示的字符串列表:

'C:/Users/Me/Adir\Asubdir\'

等等。

我想拆分子目录并将每个目录名称捕获为它自己的元素。下面是一个尝试。我似乎对 \/ 字符有疑问。我假设 \ 正在转义,所以 '[\/]' 对我来说说寻找 \/ 那么 '[\/]([\w\s]+)[\/]' 作为匹配模式应该寻找之间的任何单词两个斜线...但输出只有 ['/Users/'] 并且没有其他匹配。所以我然后为正斜杠添加一个转义符。

'[\\/]([\w\s]+)[\\/]'

但是,我的输出然后只变成 ['Users','ADir'],这让我感到困惑。

我的问题是如何使用 \/ 从字符串中标记每个目录,但也许为什么我的 RE 没有像我预期的那样工作?

最小示例:

import re, os

info = re.compile('[\\/]([\w ]+)[\\/]')


root = 'C:/Users/i12500198/Documents/Projects/'

def getFiles(wdir=os.getcwd()):
    files = (os.path.join(wdir,file) for file in os.listdir(wdir)
                 if os.path.isfile(os.path.join(wdir,file)))
    return list(files)

def getDirs(wdir=os.getcwd()):
    dirs = (os.path.join(wdir,adir) for adir in os.listdir(wdir)
                if os.path.isdir(os.path.join(wdir,adir)))
    return list(dirs)

def walkSubdirs(root,below=[]):
    subdirs = getDirs(root)
    for aDir in subdirs:
        below.append(aDir)
        walkSubdirs(aDir,below)       
        
    return below   

subdirs = walkSubdirs(root)
    
for aDir in subdirs:
    files = getFiles(aDir)
    for f in files:
        finfo = info.findall(f)
        print(f)
        print(finfo)

I want to split the subdirectories and capture each directory name as its own element

我建议您使用 Python 的标准函数之一来解析文件系统路径,而不是正则表达式。

这是一个使用 pathlib:

from pathlib import Path

p = Path("C:/Users/Me/ADir\ASub Dir x 2 Dir\")
p.parts
#=> ('C:\', 'Users', 'Me', 'ADir', 'ASub Dir\x02 x 2 Dir')

请注意 pathlib.Path 的行为取决于系统 运行 Python。由于我在 Linux 机器上,所以我实际上在这里使用了 pathlib.PureWindowsPath。我相信输出对于 Windows.

上的那些人来说应该是准确的