我有一个字符串定义为,
content = "f(1, 4, 'red', '/color/down1.html');
f(2, 5, 'green', '/color/colorpanel/down2.html');
f(3, 6, 'blue', '/color/colorpanel/colorlibrary/down3.html');"
这是我尝试的代码,但它不起作用:
results = re.findall(r"f(.*?)", content)
for each in results:
print each
如何使用正则表达式检索内容中的链接?感谢。
答案 0 :(得分:1)
您可以在https://regex101.com/和http://regexr.com/
上了解基本的正则表达式In [4]: import re
In [5]: content = "f(1, 4, 'red', '/color/down1.html'); \
...: f(2, 5, 'green', '/color/colorpanel/down2.html'); \
...: f(3, 6, 'blue', '/color/colorpanel/colorlibrary/down3.html');"
In [6]: p = re.compile(r'(?=/).*?(?<=.html)')
In [7]: p.findall(content)
Out[7]:
['/color/down1.html',
'/color/colorpanel/down2.html',
'/color/colorpanel/colorlibrary/down3.html']
。*?匹配任何字符(行
除外)*?量词 - 在零和无限次之间匹配,尽可能少,根据需要进行扩展(懒惰)
您也可以获取最后一个/
In [8]: p2 = re.compile(r'[^/]*.html')
In [9]: p2.findall(content)
Out[9]: ['down1.html', 'down2.html', 'down3.html']
[^ /] * 匹配下面列表中不存在的单个字符
*量词 - 在零和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)
/ 匹配字符/字面(区分大小写)
。匹配任何字符(行终止符除外) html字面匹配字符html(区分大小写)。
或者,您可以在f()
In [15]: p3 = re.compile(r"(?=f\().*?(?<=\);)")
In [16]: p3.findall(content)
Out[16]:
["f(1, 4, 'red', '/color/down1.html');",
"f(2, 5, 'green', '/color/colorpanel/down2.html');",
"f(3, 6, 'blue', '/color/colorpanel/colorlibrary/down3.html');"]
答案 1 :(得分:0)
您可以执行以下操作:
re.findall(r"f\(.*,.*,.*, '(.*)'", content)
答案 2 :(得分:0)
你可以尝试这样:
(\/[^']+?)'
输出:
/
正则表达式:
'
- 匹配'
后跟一个或多个非{{1}}个字符,直到第一次出现{{1}}并在第1组中捕获。