如何使用正则表达式在python中检索数据?

时间:2017-02-11 08:07:10

标签: python regex

我有一个字符串定义为,

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

如何使用正则表达式检索内容中的链接?感谢。

3 个答案:

答案 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组中捕获。