Python:只有数字和一个点(。)的Regex子项如果有

时间:2019-01-24 05:49:06

标签: python python-2.7

如何使用regex.sub将任何字符串替换为具有数字的字符串,如果有则仅替换一个点(。)。

示例:

string = "aa122..2a" # "122.2"
string = "aa122a3a" # "1223"

我尝试了

re.sub(r'[^\d\.{0,1}]', '', string)

但是{0,1}无效。

1 个答案:

答案 0 :(得分:2)

您要删除除第一个数字外的所有非数字和所有点,因此正则表达式应为

import regex

regex.sub(r"([^\d.]|(?<=\..*)\.)", "", string)

第一部分与任何不是数字或点的字符匹配。第二部分与前面有另一个点的任何点匹配,因此仅保留第一个点。

由于使用了可变长度的回溯,因此库存re模块不起作用。您需要regex on PyPI才能使用此功能。

测试:

>>> regex.sub(r"([^\d.]|(?<=\..*)\.)", "", "aa122.3.4.5a")
'122.345'