结合负正向和反向正则表达式



我想要一个正则表达式,它将在每个"."拆分字符串,除非"."之前和之后是一个数字。例子:

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

我现在有:

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

但是它给出了:

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

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

非|方法:

(?<![0-9](?=.[0-9])).

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

In [18]: re.split(r'(?<!d).|.(?!d)', text)
Out[18]: ['hello world', 'foo 1.1 bar', '1']

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

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

为了提供最短的解决方案,以下是我的解决方案:

(这只是@ yth的解决方案与一个小的调整)

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

工作小提琴

最新更新