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的问题很难判断。但是,如果不是,那么这个表达式就是正确的。