拆分带时间戳的字符串

时间:2014-04-27 14:42:14

标签: python regex string

您好我已经从网上抓取信息并将其标准化以删除所有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

1 个答案:

答案 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). '
]