You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式:提取HTML标签内无空格换行的带分隔符数值

解决标签内数值提取的正则问题

看来你卡在提取带冗余空白的数值上了,我来帮你捋捋问题出在哪,再给你靠谱的解决方案:

首先得说下你之前用的正则为啥不好用:

  • <span class="value">(.*)</span>:这个用了贪婪匹配,会把标签里的所有内容(包括前后的28个空格、换行符)全抓进来,拿到的不是纯数值;
  • <span="value">[^\s-]</span>:首先语法就错了(少了class=),而且[^\s-]只能匹配单个非空格、非横杠的字符,根本拿不到完整的数值串。

针对你的需求(唯一标签、数值含逗号/点、前后有大量空白),给你两个实用方案:

方案1:精准匹配数值格式

如果确定数值只由数字、逗号、点组成,用这个正则直接捕获纯数值:

<span class="value">\s*([\d.,]+)\s*</span>
  • \s*:匹配任意数量的空白(空格、换行、制表符都算),跳过前后的冗余空白;
  • [\d.,]+:匹配1个及以上的数字、逗号或点,正好覆盖你提到的1、0,123、123.456,78这些格式;
  • 括号里的内容就是你要的纯数值。

比如用Python测试:

import re
html = '<span class="value">\n                        123.456,78 </span>'
match = re.search(r'<span class="value">\s*([\d.,]+)\s*</span>', html)
print(match.group(1))  # 输出 123.456,78

方案2:先抓内容再清空白

如果数值格式可能有其他变化(比如偶尔带特殊符号),先捕获标签内的全部内容,再用strip()去掉前后空白更灵活:

<span class="value">(.*?)</span>
  • .*?是非贪婪匹配,只会抓当前标签内的内容(不会越界,虽然你说只有一个标签,但这样更安全);
  • 拿到内容后调用字符串的strip()方法,一键清除前后所有空白和换行。

示例代码:

import re
html = '<span class="value"> 0,0126 </span>'
match = re.search(r'<span class="value">(.*?)</span>', html)
if match:
    clean_value = match.group(1).strip()
    print(clean_value)  # 输出 0,0126

这两个方案都能完美解决你的问题,选哪个看你对数值格式的确定性~

内容的提问来源于stack exchange,提问作者Evgeniy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:49:58