如何使用正则表达式在非数字之前拆分一段时间?

时间:2018-04-07 04:07:27

标签: python regex split

假设我有一个字符串

line = "Apple is $3.00 higher than banana. Banana is cheap.I hate apple."

我知道line.split(".")通常可以分割大多数句子。但是,在这种情况下,如果之后没有数字,我只想在.分割。通常情况下,我可能会re.split('\.[^0-9]', line),但我不想在分裂后丢失我的第一个角色。

以下是re.split('\.[^0-9]', line)的输出:

['Apple is $3.00 higher than banana', 'Banana is cheap', ' hate apple.']

我们可以看到I已被删除。

2 个答案:

答案 0 :(得分:3)

要执行非捕获匹配,您可以使用正面和负面前瞻。这些将查看下一个匹配的模式,而不在结果中包含该模式。 下面是一个正向前瞻的例子,它将捕获patA的所有子串,然后是patB 注意patA和patB是正则表达式"变量"

patA(?=patB) 

下面是一个负向前瞻的示例,它将捕获patA的所有子字符串,后跟patB。

patA(?!patB) 

在您的情况下,所有未跟随数字的小数点应表示为

\.(?![0-9])

答案 1 :(得分:2)

否定前瞻:

tupelo.forest tree

结果:

re.split('\.(?![0-9])', line)

由于['Apple is $3.00 higher than banana', ' Banana is cheap', 'I hate apple', ''] 直接位于点后,因此正则表达式I将删除'\.[^0-9]',因为I将匹配作为分隔符,并且所有分隔符都将被删除。