如何提取字符串中的最后一个浮点数值?已用$符号尝试但遇问题
提取字符串中最后出现的浮点数值
嘿,这个问题我熟!你想从字符串里揪出最后出现的那个浮点数,之前用$符号匹配结果却带了后面的无关内容,大概率是正则的写法没到位。我给你两种靠谱的解决办法:
方法一:用正则直接匹配最后一个浮点数
我们可以借助负向预查来确保匹配到的是最后一个符合格式的浮点数,不会捎带后面的内容。用这个正则表达式就行:
\d+\.\d+(?!.*\d+\.\d+)
正则解释:
\d+\.\d+:匹配标准的浮点数(至少1位整数 + 小数点 + 至少1位小数)(?!.*\d+\.\d+):这是负向预查规则,意思是「当前匹配的位置之后,再也找不到其他浮点数了」,完美锁定最后一个目标。
用Python代码演示的话就是这样:
import re text = "Hello i dont want to select 123.12 but 890.12 how do i do it " match_result = re.search(r'\d+\.\d+(?!.*\d+\.\d+)', text) if match_result: print(match_result.group()) # 输出:890.12
方法二:先提取所有浮点数,再取最后一个
如果觉得正则的预查规则有点绕,也可以换个更直观的思路:先把字符串里所有的浮点数都找出来,然后直接取列表的最后一个元素。代码示例:
import re text = "Hello i dont want to select 123.12 but 890.12 how do i do it " all_float_numbers = re.findall(r'\d+\.\d+', text) if all_float_numbers: print(all_float_numbers[-1]) # 输出:890.12
为啥你之前用$会出问题?
你之前尝试的$是匹配字符串末尾,但你的目标浮点数后面还有how do i do it这些内容,所以如果直接写\d+\.\d+$根本匹配不到内容;要是不小心写成了\d+\.\d+.*$,就会把浮点数和后面的所有内容都包含进去,这就是你说的「结果带了数值后内容」的原因啦。
内容的提问来源于stack exchange,提问作者Taleev Aalam
相关产品推荐
相关产品推荐

