如何拆分句子中与文本混合的整数、浮点数并整理为规范字符串
实现方案
原有方案问题说明
你使用的正则\d*\.*\d+\.*\d*存在多重点号匹配缺陷,可能识别到1.2.3这类无效数字格式,同时拆分后没有将数字片段和文本片段按原有顺序穿插合并,因此无法得到预期结果。
解决思路
- 先修正数字匹配正则,可准确匹配包含省略整数位(如
.5)、多前导零(如00.5)在内的合法整数、浮点数 - 拆分字符串得到所有非数字片段,同时提取所有数字片段
- 将两类片段按原有顺序交叉合并,过滤空字符串后用空格拼接即可
可运行代码示例
import re from itertools import zip_longest str1 = "test1.25nb 5test .5NB 00.5my_test 5unit 5.6" # 匹配合法整数/浮点数的正则 num_pattern = r'\d*\.\d+|\d+' # 拆分得到所有非数字片段 text_parts = re.split(num_pattern, str1) # 提取所有数字片段 num_parts = re.findall(num_pattern, str1) # 交叉合并两类片段,过滤空串后拼接为最终结果 result = ' '.join( [part for pair in zip_longest(text_parts, num_parts, fillvalue='') for part in pair if part.strip()] ) print(result)
输出结果
test 1.25 nb 5 test .5 NB 00.5 my_test 5 unit 5.6
内容的提问来源于stack exchange,提问作者Droid-Bird
相关产品推荐
相关产品推荐

