Python:Regex-sub,只有数字和一个点(.)如果有

Python:Regex-sub,只有数字和一个点(.)如果有,python,python-2.7,Python,Python 2.7,如何使用regex.sub将任何字符串替换为字符串have number,如果have,则仅替换一个点(.) 例如: string = "aa122..2a" # "122.2" 我试过了 re.sub(r'[^\d\.{0,1}]', '', string) 但是{0,1}不起作用。您想删除除第一个之外的所有非数字和点,因此正则表达式应该是 import regex regex.sub(r"([^\d.]|(?<=\..*)\.)", "", string) 您希望删除除第一个之

如何使用
regex.sub
将任何字符串替换为字符串have number,如果have,则仅替换一个点(.)

例如:

string = "aa122..2a" # "122.2"
我试过了

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

但是
{0,1}
不起作用。

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

import regex

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

您希望删除除第一个之外的所有非数字和所有点,因此正则表达式应该是

import regex

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

如果有两个不连续的点,例如
aa122.3.4.5a
?它将只接受找到的第一个点,如“122.345”。如果有两个不连续的点,例如
aa122.3.4.5a
,它将只接受找到的第一个点,如“122.345”,但如果string=“aa122..2zz…”它将转换为“122.2”。我的期望值是“122.2”,然后我推荐,股票
re
不能胜任这项任务。ty,我只投赞成票,因为主要问题是re。在这种情况下,如果只使用lookbehind,您可以通过翻转字符串并将regexp转换为使用lookbehind来实现它,这不限于常量长度:
re.sub(r)([^\d.]\.(?=.*.\)”,string[:-1])[:-1]
工作(使用标准
re
)。我尝试过,但如果string=“aa122..2zz它将转换为“122.2”。我的期望值是“122.2”,然后我推荐,股票
re
不能胜任这项任务。ty,我只投赞成票,因为主要问题是re。在这种情况下,如果只使用lookbehind,则可以通过翻转字符串并将regexp转换为使用lookbehind来对其进行压缩,这不限于常量长度:
re.sub(r)([^\d.]| \.(?=.*),”,string[:-1])[:-1]
工作(使用标准
re
)。
>>> regex.sub(r"([^\d.]|(?<=\..*)\.)", "", "aa122.3.4.5a")
'122.345'