簡體   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