正则表达式来匹配不同的字符串列表
问题描述:
我有一个包含unicode字符串Python列表:正则表达式来匹配不同的字符串列表
mylist = [
u'Path:path\\to\\some\\file.html\n user ID: a.b.c\n',
u'Path:somewhat\\longer\\path\\to\\some\\file.jpeg\n user ID: a:b_c\n someotherID:x:x:x\n'
]
我需要提取唯一路径的最后一部分:在这种情况下file.html和file.jpeg。是否有任何全面的正则表达式来从我的列表中获取这些信息?
答
如果使用ntpath
代替os.path
你得到正确的行为,而摇摇欲坠的正则表达式:
>>> import ntpath
>>> [ntpath.basename(entry.split('\n')[0]) for entry in mylist]
[u'file.html', u'file.jpeg']
与@Kasra所说的相反,你的路径是有效的,它们只是来自另一个操作系统。
答
你不需要正则表达式,你可以使用os.path
,但首先你需要/
更换\
然后使用path.basename
:
>>> from os import path
>>> [path.basename(i.split()[0].replace('\\','/')) for i in mylist if i]
[u'file.html', u'file.jpeg']
答
for path in path_list:
# assuming each item in the list actually contains a path
print re.search(r'Path:(?:.*?\\)(\w+\.\w+)', path).group(1)
+0
谢谢Malik这个人也能工作。感谢真棒正则表达式。 – Tania
+0
任何时候,我很高兴我能帮上忙。 –
难道你不是指'file.jpeg'而不是'file.img'吗? – funkwurm
哦,是的,谢谢指出 – Tania
或'[re.match(r'(?m)Path:。* \\([^ \\\ n] *)$',i).group(1)for i在mylist]' –