结合负向预查和后顾正则表达式

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个回答

3
一种非 | 方法:
(?<![0-9](?=.[0-9]))\.

1

如果在点号.之前没有数字或之后也没有数字,就将其拆分:

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

1

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

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

0

仅为了贡献最短的解决方案,这是我的解决方案:

(它只是 @ysth 的解决方案做了一些小调整)

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

工作演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接