我正在开发一个项目,以便用Python 3学习和开发我的代码功能。在这个项目中,我需要带路径的原始字符串。
示例:
rPaths = [r"Path to the app", r"C:\\Program Files (x86)\\MAGIX\\MP3 deluxe 19\\MP3deluxe.exe", r"F:\\VLC\\vlc.exe"]
我还需要从另一个仅包含普通列表的列表中实现:
Paths = ["Path to the app", "C:\\Program Files (x86)\\MAGIX\\MP3 deluxe 19\\MP3deluxe.exe", "F:\\VLC\\vlc.exe"]
为了达到这个目的,我尝试了以下方法:
rPaths1 = "%r"%Paths
rPaths2 = [re.compile(p) for p in Paths]
rPaths3 = ["%r"%p for p in Paths]
结果不符合要求:
>>>print(Paths)
['Path to the app', 'C:\\Program Files (x86)\\MAGIX\\MP3 deluxe 19\\MP3deluxe.exe', 'F:\\VLC\\vlc.exe']
>>>print(rPaths)
['Path to the app', 'C:\\\\Program Files (x86)\\\\MAGIX\\\\MP3 deluxe 19\\\\MP3deluxe.exe', 'F:\\\\VLC\\\\vlc.exe']
>>>print(rPaths1)
['Path to the app', 'C:\\Program Files (x86)\\MAGIX\\MP3 deluxe 19\\MP3deluxe.exe', 'F:\\VLC\\vlc.exe']
>>>print(rPaths2)
[re.compile('Path to the app'), re.compile('C:\\Program Files (x86)\\MAGIX\\MP3 deluxe 19\\MP3deluxe.exe'), re.compile('F:\\VLC\\vlc.exe')]
>>>print(rPaths3)
["'Path to the app'", "'C:\\\\Program Files (x86)\\\\MAGIX\\\\MP3 deluxe 19\\\\MP3deluxe.exe'", "'F:\\\\VLC\\\\vlc.exe'"]
任何人都可以帮助我吗?
我不想进口任何东西。
答案 0 :(得分:0)
原始字符串只是字符串。路径可以使用相同的方式,只要它们中包含正确的字符。
>>> raw_strings = [r'Paths', r'C:\Program Files\Something']
>>> non_raw_strings = ['Paths', 'C:\\Program Files\\Something']
>>> raw_strings == non_raw_strings
True
>>> raw_strings[1]
'C:\\Program Files\\Something'
>>> print(raw_strings[1])
C:\Program Files\Something
但是,如果将反斜杠加倍和使用原始字符串,则会得到不同的字符串:
>>> r'C:\Program Files\Something' == r'C:\\Program Files\\Something'
False
可能让您感到困惑的部分原因是print
list
对象将使用repr
格式化列表中的项目,交互式Python提示符也将使用{{} 1}}格式化字符串。这意味着包含单个反斜杠的字符串可能看起来,就像它包含两个反斜杠一样。但不要被愚弄:
repr
如果您的目标是将字符串与正则表达式一起使用,并且您希望将对正则表达式语法有意义的字符(例如>>> one_backslash_char = '\\'
>>> len(one_backslash_char)
1
>>> one_backslash_char
'\\'
>>> print(one_backslash_char)
\
>>> list_containing_string = [one_backslash_char]
>>> print(list_containing_string)
['\\']
>>> list_containing_string[0]
'\\'
>>> print(list_containing_string[0])
\
)转换为正则表达式匹配相应文字的表单(例如,您有\
,您希望匹配\
,因此字符串需要包含\
),那么您想要的函数是re.escape(string)
,它就是这样做的。
答案 1 :(得分:0)
如果我清楚地理解这一点,您希望使用re.compile
匹配某个路径,但这不是它的工作原理。根据{{3}},你应该试试这个:
prog = re.compile(pattern)
result = prog.match(string)
在你的情况下,我试试
for pattern in rPaths:
prog = re.compile(pattern)
rPaths2 = [prog.match(string) for string in Paths]
同样,不是100%确定你的问题是什么。这有帮助吗?