我想用python重新分割()按空格和句点,但保留最后一个数字

2024-09-22 20:27:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望使用pythonre.split()将字符串按空格和句点拆分为单个单词,但我不希望将["1.2"]拆分为["1", "2"]。在

示例:

line = "AAA BBB.CCC.DDD BBB.CCC.DDD -0.03951979"

结果应该是:

^{pr2}$

我用x = re.split('\W+',line)来分割它,但是结果不是我想要的。在

它得到了['AAA','BBB','CCC','DDD','BBB','CCC','DDD','-0','03951979','']

谢谢。在


Tags: 字符串re示例line单词split空格bbb
3条回答

https://regex101.com/r/TFObY0/1

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

请注意,这也不会拆分123.23.24。在

如果一侧不是数字或两侧都不是数字,则仅使用.作为分隔符。 将所有空格字符作为分隔符。在

\W+替换为(?<=\d)\.(?!\d)|(?<!\d)\.(?=\d)|(?<!\d)\.(?!\d)|,使其正常工作。在


正则表达式解释
(?<=\d)\.(?!\d)|(?<!\d)\.(?=\d)|(?<!\d)\.(?!\d)|

我们在这里使用四个部分作为分隔符1|2|3|4
因此,请分别理解每个部分。
1一个.,具有前导数字而不是尾随数字。1.2.b->;1.2b
2没有前导数字和尾随数字的.a.1.2->;a1.2
三。两边都没有数字的.->;a-1
4全部 characters 1 2->;12

让我们来了解这些条件是如何产生的

Lookbehinds

^{pr2}$

现在你了解了周围的环境,你就能理解比赛的每一部分。在

这个怎么样?在

re.findall('[+-]*[0-9]+\.[0-9]+|[^ ^.]+', line)

它首先查找小数点(以/不带+/-开始,然后至少一位数字、一个点和至少一位数字), 第二,找一些不包含空格和点的东西。在

我得到了输出:

^{pr2}$

使用lookaround

import re
line ="AAA BBB.CCC.001 BBB.CCC.001 -0.03951979" 
res = re.split("(?<!\d)[.\s]|[.\s](?!\d)", line)
print(res)

输出:

^{pr2}$

如果周围没有数字,它将在空格或点上拆分。在

根据评论编辑:

line = "AAA BBB.C01.001 BBB.C01.001 -0.03951979 "
res = re.findall(r"([-+]?\b\d+\.\d+\b|[a-zA-Z0-9]+)", line)
print(res)

输出:

['AAA', 'BBB', 'C01', '001', 'BBB', 'C01', '001', '-0.03951979']

相关问题 更多 >