您好我已经从网上抓取信息并将其标准化以删除所有html等,留下我的一个包含
的字符串foo XX:XX +XX:XX bar XX:XX +X:XX bar2 XX:XX +X:XX bar3 XX:XX bar4 XX:XX bar5
foo
未按时间戳进行,保留或删除foo
的方式可以正常,因为它始终作为第一个bar
重复。
我希望在XX:XX
上分开,但<{1}}上的不,每个+XX:XX
可以在bar
之前或仅{{1} }}
我还希望在分割时保留时间戳,所以我得到一个字符串列表,如:
XX:XX +XX:XX
为了帮助理解这是基于来自英国广播公司网站的足球比赛html评论,如http://www.bbc.co.uk/sport/0/football/27092972
正在尝试以正式起点的正则表达式
XX:XX
考虑到它不会编译,这是错误的,它的形式应该是:
XX:XX +XX:XX bar
XX:XX +XX:XX bar2
.....
XX:XX bar5
是的模式是
(?(name)\d+:\d\d|\+\d+:\d\d)
并且没有模式
(?(id/name)yes-pattern|no-pattern)
我将使用\d+:\d\d (1 or more digits, colon, 2 digits)
有关详细信息,我计划将时间戳转换为秒,因此稍后我会将+\d+:\d\d (same as yes pattern, but with a + sign proceeding)
和re.split(expression)
添加到XX:XX
。
以下是我的程序目前拥有的示例字符串
+XX:XX
所以我希望得到一个列表
YY:YY
答案 0 :(得分:1)
您可以在此处使用肯定前瞻。
results = re.split(r'\s+(?=\d+:\d{2})', s)
正则表达式:
\s+ # whitespace (\n, \r, \t, \f, and " ") (1 or more times)
(?= # look ahead to see if there is:
\d+ # digits (0-9) (1 or more times)
: # ':'
\d{2} # digits (0-9) (2 times)
) # end of look-ahead
输出
[
'Full Time Match ends, Everton 3, Swansea City 1.',
'90:00 +4:09 Full time Full Time Second Half ends, Everton 3, Swansea City 1.',
'90:00 +2:47 Attempt blocked. Nathan Dyer (Swansea City) right footed shot from the centre of the box is blocked. Assisted by Pablo Hern\xc3\x83\xc2\xa1ndez.',
'90:00 +0:18 Offside, Swansea City. Leroy Lita tries a through ball, but Ashley Williams is caught offside.',
'89:31 Corner, Swansea City. Conceded by Leighton Baines.',
'88:42 Foul by James McCarthy (Everton). '
]