我正在尝试在python中编写一个正则表达式以查找目录路径:我的文本如下所示:
text = "The public disk is: \\\\diskA\\FolderB\\SubFolderC\\FileD"
我尝试使用:
import re
my_regex = re.compile(r'\\(.*?)+\\(.*?)')
result = my_regex.search(text)
print(result)
这就是我得到的结果:
<_sre.SRE_Match object; span=(7, 9), match='\\\\'>
所以看起来正则表达式可以识别\\,但不能识别\ ...之前有人遇到过类似情况吗?请帮忙。欢迎任何建议! 谢谢!
答案 0 :(得分:0)
您的正则表达式搜索字词似乎不符合您的期望。
尝试此正则表达式:
import re
text = r"The public disk is: \\diskA\FolderB\SubFolderC\FileD"
searchtext = r'\\(\\\w+)*\\'
my_regex = re.compile(searchtext)
result = my_regex.search(text)
print(result.group())
>>> \\diskA\FolderB\SubFolderC\
好,那么这是怎么回事?在在线正则表达式编辑器(例如https://regex101.com/
)上关注allong可能会有所帮助所以您的文件夹看起来总是结构化的
\\disk\folder\subfolder\sub-subfoler\...etc..\file
因此,我们要查找的结构是一个以\\开头,以\结尾的结构,它们之间是一个或多个使用文字字符的磁盘\目录名。
查询将查找一段以\开头和结尾且之间有零个或多个\ dir语句的文本。因此\\,\\ disk \,\\ disk \ dir \都匹配。
将查询放在一起
\\ # the starting backslash (escaped because backslash is also a special character)
(\\\w+)* # one or more word characters (\w) preceded by an escaped backslash repeated zero or more times
\\ # finally another backslash, escaped
如果要扩展文件路径中的有效字符,请编辑正则表达式的\ w部分。例如,如果您也想将(和)用作有效字符:
searchtext = r'\\(\\[\w()]+)*\\'
请注意,我添加了方括号并添加了更多字符。
方括号基本上是可选字符,它们表示任何这些字符。有些字符不需要转义,而另一些字符需要转义。例如。不需要转义,但是[和]不需要转义。
一个半完整的列表是
searchtext = r'\\(\\[\w()\[\]\{\}:`!@#_\-]+)*\\'