Python重新字符串解析
我试图在scrapy中使用re模式来解析字符串。字符串的格式如下。我正在尝试检索字体标记中的数字(例如,Python重新字符串解析,python,string,parsing,Python,String,Parsing,我试图在scrapy中使用re模式来解析字符串。字符串的格式如下。我正在尝试检索字体标记中的数字(例如,08:00)。很容易在一个列表中完成(\d+:\d+),但我需要两个单独的AM和PM列表。您只能通过创建两个子字符串-AM和PM-然后针对每个子字符串运行模式来实现这一点吗?(AM-和(PM-是独一无二的。感觉你应该可以直接做,但我没有主意。谢谢 输入示例: (AM – 07:00 <font color=#0002fe>08:00</font> <font co
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>)
(上午-07:00 08:00 09:00 10:100)
(下午-18:00 190:00 175:00)
我首先消除HTML标记并使用纯文本。为此,您可以使用HTML解析器,如:
>>来自bs4导入组
>>>数据='(上午–07:00 08:00 09:00 10:100)
(下午–18:00 190:00 175:00)'
>>>soup=BeautifulSoup(数据,“html.parser”)
>>>data=soup.get_text()
>>>AM,PM=数据分割(“”)
>>>上午
u'(AM\u2013 07:00 08:00 09:00 10:100)
>>>首相
u'(下午\u2013 18:00 190:00 175:00)
我首先消除HTML标记并使用纯文本。为此,您可以使用HTML解析器,如:
>>来自bs4导入组
>>>数据='(上午–07:00 08:00 09:00 10:100)
(下午–18:00 190:00 175:00)'
>>>soup=BeautifulSoup(数据,“html.parser”)
>>>data=soup.get_text()
>>>AM,PM=数据分割(“”)
>>>上午
u'(AM\u2013 07:00 08:00 09:00 10:100)
>>>首相
u'(下午\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)
如果字符串总是与示例类似,则可以使用以下正则表达式执行此操作:
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)
与其对整个输入调用
get_text()
,不如对
标记本身进行拆分?@dimo414这是一个很好的观点。我只是担心操作的问题过于复杂,所以决定只显示起点,以使数据对任务更方便。谢谢。与其调用get_text(),不如
就整个输入而言,为什么不在
标记本身上拆分呢?@dimo414这是一个很好的观点。我只是担心操作的问题过于复杂,所以决定只显示起点,以使数据更方便完成任务。谢谢。谢谢你的回复。我担心我在原来的帖子中不够清楚。提供的字符串是一个示例,但它是包含许多其他标记的较大字符串的一部分。因此,按建议的方式拆分标记不是一个选项。关于BeautifulSoup,我没有使用它,因此我认为使用re将两个部分提取为子字符串并按指示解析它们可能更容易。再次感谢。t感谢您的回复。恐怕我在我的原始帖子中不够清楚。提供的字符串是一个示例,但它是包含许多其他标签的较大字符串的一部分。标签,因此以建议的方式拆分标签不是一个选项。关于BeautifulSoup,我没有使用它,因此我认为对我来说,使用re-to-ext可能更容易将这两部分提取为子字符串,并按指示进行分析。再次感谢。
08:00
09:00
10:100
190:00
175:00