我遇到了这个问题,我必须通过创建一个将所有浮点数乘以预定浮点数(参数(的函数来解决,但问题是我无法让它识别浮点数,只能识别整数(将 2.5 识别为 2 和 5(
例如,我在这里看到的以 2 作为参数的代码将运行"2.5,3.5,4.5"并产生"4.10,6.10,8.10",但我想以"5,7,9"结束。有什么想法吗?
以下是解决它的代码,但仅适用于整数:
def myfunction(mystring, by):
return re.sub(
re.compile("d+"),
lambda matchobj: str(int(matchobj.group(0))*by),
mystring
)
如果您可以对一个小任务使用全新的库,那么以下是您使用 re
的解决方案example = "2.5,3.5,4.5"
example = re.sub(""", "", example)
example = re.split(",", example)
example = [2*float(e) for e in example]
但是你最好像答案一样使用 split @smci
当你说"所有漂浮在一条线上"时,你的意思是"在一根弦中"。所以你真的首先想把它转换成单独的字符串:"2.4 6.7 1.8".split()
,然后将它们转换成浮点数列表。此外,您也不需要正则表达式。
您可以在列表理解中完成所有这些操作:
>>> numbers = [float(s) for s in "2.4 6.7 1.8".split()]
[2.4, 6.7, 1.8]
或者即使你愿意,你也可以包括乘以by
:
[by * float(s) for s in "2.4 6.7 1.8".split()]
def myfunction(mystring, by):
return [by * float(s) for s in "2.4 6.7 1.8".split()]
现在,如果您坚持使用正则表达式(您不需要它也不应该(,您的问题是您不知道如何更改正则表达式 r'\d+' 正则表达式来处理浮点数......请参阅文档。 提示: 。匹配小数点。请记住,在浮点数中,小数部分是可选的,例如7 7. 7.5
都可以是漂浮物。
那么,提示:什么是具有一个或多个数字的正则表达式,可以选择后跟小数点和零位或多位数字?
您可以使用字符串的split()
方法和map()
函数在一行中简单地执行此操作。
def mymethod(mystring, by):
return " ".join(map(lambda num: float(num) * by, mystring.split()))
或者更简洁地说:
mymethod = lambda mystring, by: " ".join(map(lambda num: float(num) * by, mystring.split()))
要使用re
匹配浮点数:
r"([+-])?d*.?d+"