我使用此regex(\/.*\.[\w:]+)
来查找所有文件路径和目录。但是在像"file path /log/file.txt some lines /log/var/file2.txt"
这样的行中,它在同一行中包含两个路径,它不会单独选择路径,而是选择整行。怎么解决这个问题?
答案 0 :(得分:3)
使用regex(\/.*?\.[\w:]+)
使正则表达式非贪婪。如果要在同一行中找到多个匹配项,可以使用re.findall()。
更新: 使用此代码和提供的示例,我得到:
import re
re.findall(r'(\/.*?\.[\w:]+)', "file path /log/file.txt some lines /log/var/file2.txt")
['/log/file.txt', '/log/var/file2.txt']
答案 1 :(得分:1)
您的正则表达式(\/.*\.[\w:]+)
使用.*
这是贪婪的,并且会在[\w:]+
的最后一个点后匹配file2.txt
。您可以改为使用.*?
。
但它也会匹配/log////var////.txt
作为替代方案,您可以使用与目录结构(?:/[^/]+)+?
匹配的重复非贪婪模式,后跟与文件名/\w+\.\w+
匹配的部分
import re
s = "file path /log/file.txt some lines /log/var/file2.txt or /log////var////.txt"
print(re.findall(r'(?:/[^/]+)+?/\w+\.\w+', s))
这将导致:
['/log/file.txt', '/log/var/file2.txt']
答案 2 :(得分:1)
您可以使用python re
类似的东西:
import re
msg="file path /log/file.txt some lines /log/var/file2.txt"
matches = re.findall("(/[a-zA-Z\./]*[\s]?)", msg)
print(matches)
参考:https://docs.python.org/2/library/re.html#finding-all-adverbs