繁体   English   中英

如何创建一个新列表,每个元素都是python中另一个列表的每个元素的正则表达式?

[英]How can I create a new list with each element a regular expression of each element of another list in python?

我一直在玩一些不同的语法,但似乎没有任何工作,我得到语法错误“TypeError:'str'对象不支持项目分配”和一些othes

for url in urls:
  for i in range(len(urls)):    
    filename[i] = [re.search(r'/([.]+)(.pdf)') for url[i] in urls]

我也尝试过:

for url in urls:
    filename[i] = [re.search(r'/([.]+)(.pdf)') for url[i] in urls for i in range(len(urls))]

还有一些其他的排列。 我一直在想列表理解是最好的方法,但是我不确定我需要使用的语法。 有什么帮助吗?

你是在正确的轨道上有一个列表理解,但你正在使它比它更复杂:

[re.search(r'/([.]+)(.pdf)', url) for url in urls]

请注意,这将是匹配列表,如果您需要,例如,它找到的组,忽略它不匹配的任何URL,您可以这样做:

[match.groups() for match in (re.search(r'/([.]+)(.pdf)', url) for url in urls) if match]

它使用嵌套的生成器表达式来检查是否已进行匹配,如果匹配,则从中提取组:

>>> urls = ["http://wwww.example.com/test.html", "http://www.example.com/test.pdf"]
>>> [match.groups() for match in (re.search(r'/([^/]+)(.pdf)', url) for url in urls) if match]
[('test', '.pdf')]

在这里,我对你的正则表达式进行了一些编辑,使其适用于我的示例,这只是为了示例而已。

当然,你可以在这里用匹配对象做任何你想做的事情,而不仅仅是获得match.groups()

使用列表推导,我创建了一个url列表,如果url regex结果与模式匹配,则只会将其插入到新列表中

file_regex = re.compile(r'/([a-zA-Z0-9]+)(.pdf)')

filenames = [file_regex.search(url) for url in urls if file_regex.match(url)]

print filenames

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM