使用原始字符串在列表中转换列表

时间:2018-03-28 15:29:47

标签: python python-3.x list rawstring

我正在开发一个项目,以便用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'"]

任何人都可以帮助我吗?

我不想进口任何东西。

2 个答案:

答案 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%确定你的问题是什么。这有帮助吗?