Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python在reqular表达式中获取浮点数_Python_Regex_Python 2.7 - Fatal编程技术网

python在reqular表达式中获取浮点数

python在reqular表达式中获取浮点数,python,regex,python-2.7,Python,Regex,Python 2.7,我有这些格式的可能性: 1,34$ 1.34$ 114$ 0,34$ 0.34$ 我只想知道电话号码 我用的是普通快车 (\d+),(\d*) 但是当我在1,34$中测试它时,我得到了两个结果,分别是1和34 我只需要使用正则表达式 显然,我不是在处理点和逗号的问题,因为我不知道怎么做 我的问题是谁能得到完整的数字 我的第二个问题是,我怎么能不在乎它是逗号还是点呢 谢谢正确的正则表达式应该是: (\d+(?:[.,]\d*)?) 这意味着:一个或多个数字(可选)后跟一个点或逗号,后跟零个或

我有这些格式的可能性:

1,34$
1.34$
114$
0,34$
0.34$
我只想知道电话号码

我用的是普通快车

(\d+),(\d*)
但是当我在
1,34$
中测试它时,我得到了两个结果,分别是
1
34

我只需要使用正则表达式 显然,我不是在处理点和逗号的问题,因为我不知道怎么做 我的问题是谁能得到完整的数字

我的第二个问题是,我怎么能不在乎它是逗号还是点呢


谢谢正确的正则表达式应该是:

(\d+(?:[.,]\d*)?)
这意味着:一个或多个数字(可选)后跟一个点或逗号,后跟零个或多个数字

捕获组是整个表达式(括号之间的所有内容)。请注意,
(?…)
不是一个捕获组,只是一个表达式分组,因此
适用于该组中的所有内容

您得到两个结果的原因是您使用了两个捕获组

如果你想把结果转换成一个数字,你必须处理用点替换可能的逗号并转换成浮点数的问题。假设捕获的文本位于
文本中

float(text.replace(',','.'))
例如:

import re
text = '1,32$'
match = re.match(r'(\d+(?:[.,]\d*)?)',text)
float(match.group(1).replace(',','.'))
>>> 1.320

最后,如果数字是
111.321.145
,表达式将是
(\d+(?:[,]\d*)?(?:[,]\d*))(?:[,]\d*))
?或者不可以,这会起作用,但您可以简化:
(\d+(?:[,]\d*)*)
表示零或一和
*
零或多。我认为应该是
(\d+(?:[,]\d+)
)。否则,您将允许类似于
123.
@HamZa的内容,这取决于
213.
是否被视为有效;从OP的问题很难判断。但是,如果不是,那么这个表达式就是正确的。