Python重新进行字符串解析

时间:2016-04-22 12:52:01

标签: python string parsing

我正在尝试在scrapy中使用re模式来解析字符串。字符串的格式如下。我正在尝试检索字体标记中的数字(例如(\d+:\d+)+)。在一个列表AM中可以轻松完成,但我需要两个单独的PMAM列表。你能通过创建两个子串 - 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>) 是唯一的。感觉你应该能够直接做到,但我没有想法。谢谢。

示例输入:

if(mTouchMode == NONE) { // remove the if
    mGestureDetector.onTouchEvent(event);
}

2 个答案:

答案 0 :(得分:3)

我首先要删除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)'

答案 1 :(得分:1)

如果您的字符串总是看起来像示例那么您可以使用以下正则表达式执行此操作:

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