假设我有一个字符串
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
已被删除。
答案 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
将匹配作为分隔符,并且所有分隔符都将被删除。