[英]Python re string parsing
我正在尝试使用scrapy中的re模式来解析字符串。 该字符串的格式如下。 我正在尝试检索字体标签内的数字(例如08:00
)。 在一个列表(\\d+:\\d+)+
做起来很容易,但是我需要两个单独的AM
和PM
列表。 您只能通过创建两个子字符串( AM
和PM
)然后针对每个子字符串运行模式来做到这一点吗? (AM -
和(PM -
是唯一的。感觉您应该可以直接执行,但我没有主意。谢谢。
输入示例:
(AM – 07:00 <font color=#0002fe>08:00</font> <font color=#0000dd>09:00</font> <font color=#0001fe>10:100</font>) <br> (PM – 18:00 <font color=#0000fe>190:00</font> <font color=#0000fe>175:00</font>)
我首先要消除HTML标记,然后使用纯文本。 为此,您可以使用HTML解析器,例如BeautifulSoup
:
>>> from bs4 import BeautifulSoup
>>> data = '(AM – 07:00 <font color=#0002fe>08:00</font> <font color=#0000dd>09:00</font> <font color=#0001fe>10:100</font>) <br> (PM – 18:00 <font color=#0000fe>190:00</font> <font color=#0000fe>175:00</font>)'
>>> soup = BeautifulSoup(data, "html.parser")
>>> data = soup.get_text()
>>> AM, PM = data.split(" ")
>>> AM
u'(AM \u2013 07:00 08:00 09:00 10:100)'
>>> PM
u'(PM \u2013 18:00 190:00 175:00)'
如果您的字符串始终像示例一样,则可以使用以下正则表达式进行操作:
import re
capture = re.compile("(?<=>)[\d:]*(?=<)")
res = capture.findall("(AM – 07:00 <font color=#0002fe>08:00</font> <font color=#0000dd>09:00</font> <font color=#0001fe>10:100</font>) <br> (PM – 18:00 <font color=#0000fe>190:00</font> <font color=#0000fe>175:00</font>)")
for match in res:
print(match)
但是,如果其中还有其他类型的标签,则此方法将不起作用,因为它只会找到>
和<
之间的所有内容,且不带空格。
结果:
08:00
09:00
10:100
190:00
175:00
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.