4

我想要一个正则表达式,它会在每个字符串中拆分一个字符串,"."除非"."前面和后面跟着一个数字。例子:

"hello world.foo 1.1 bar.1"==>["hello world","foo 1.1 bar", "1"]

我目前有:

"(?<![0-9])\.(?!\d)" 

但它给出了:

["hello world", "foo 1.1 bar.1"]

但它没有找到最后一个"."有效的。

4

4 回答 4

3

一个非| 方法:

(?<![0-9](?=.[0-9]))\.
于 2012-12-27T20:52:30.177 回答
1

.如果前面没有数字,或者后面没有数字,则拆分:

In [18]: re.split(r'(?<!\d)\.|\.(?!\d)', text)
Out[18]: ['hello world', 'foo 1.1 bar', '1']
于 2012-12-27T20:20:20.240 回答
1

那是因为只有其中一个断言必须失败,整个表达式才会失败。尝试这个:

"(?<![0-9])\.|\.(?!\d)"
于 2012-12-27T20:21:25.723 回答
0

只是为了提供最短的解决方案,这是我的:

(这只是@ysth 的解决方案,稍作调整)

(?<!\d(?=.\d))\.

工作小提琴

于 2019-09-08T18:54:06.693 回答