我有一个文本文件,其中包含各种类型的路径和目录以及一些URL。我试图获取不包括URL和Windows目录(c:/)的其他路径。
txt = r'''
\Files\System\ado\
C:\Dir\me\match1\poq!"&\file.txt
http://example/uploads/ssh/
{drive of encrypted files}\FreezedByWizard.README.TXT
%Program Files%\Common Files\System\ado\
/home/user/web/other.longextension
'''
正确的输出:
\Files\System\ado\
{drive of encrypted files}\
%Program Files%\Common Files\System\ado\
/home/user/web/
我尝试了各种正则表达式,包括这些正则表达式,但是我无法获得正确的结果。
pattern = re.compile(r'(?:/[^/]+)*',re.I)
# pattern = re.compile(r'\b(\\.+\\|\/.+\/|\%.+\%)(?:[^\/]|\\\/)+?\b',re.I)
# this one for example prints all subdirectories not the main one!
matches = re.findall(pattern,txt)
print(matches)
答案 0 :(得分:5)
我注意到您想要的行都以\ { % or /
开头。也许像这样简单的事情对您有用?
^(?:\\|\{|\%|\/).+(?:\\|/)
^ start at line start
(?:\\|\{|\%|\/) non-matching group with different string starts
.+ match any character
(?:\\|/) match until reaches \ or /
pattern = re.compile(r'^(?:\\|\{|\%|\/).+(?:\\|/)', re.M)
答案 1 :(得分:2)
我不确定我是否完全了解您对要捕获的内容的意图,但是下面的代码应该为您给出的示例提供所需的输出。
pattern = re.compile(r'(?:^\\.+\\)|(?:^%.+%\\.+\\)|(?:^{.+}\\(?:.+\\)?)|(?:^/.+/)', re.I | re.M)
matches = re.findall(pattern, txt)
print(*matches, sep='\n')
打印为输出:
\Files\System\ado\
{drive of encrypted files}\
%Program Files%\Common Files\System\ado\
/home/user/web/
可以在here中找到所使用的正则表达式模式的说明。
答案 2 :(得分:2)
自readability counts起,我建议不要不要编写自己的正则表达式,而是使用os.path.dirname和urllib.parse.urlparse。后者匹配以C:\
from os.path import dirname, join
from urllib.parse import urlparse
txt = r'''
\Files\System\ado\
C:\Dir\me\match1\poq!"&\file.txt
http://example/uploads/ssh/
{drive of encrypted files}\FreezedByWizard.README.TXT
%Program Files%\Common Files\System\ado\
/home/user/web/other.longextension
'''
result = [dirname(line) for line in txt.split("\n") if not urlparse(line).scheme]
结果是:
\Files\System\ado
{drive of encrypted files}
%Program Files%\Common Files\System\ado
/home/user/web
如果需要在末尾加反斜杠,则可以easily add them by using os.path.join。
result = [join(dirname(line), '') for line in txt.split("\n") if not urlparse(line).scheme]
现在result
包含以下条目:
\Files\System\ado\
{drive of encrypted files}\
%Program Files%\Common Files\System\ado\
/home/user/web\