如何使用正则表达式从字符串中提取Total Members in Group后的数字值
问题原因
你当前的正则没有拿到预期结果,核心是两个问题:
- 你写的
(?s)是单行匹配模式,搭配开头的^.+会从字符串起始位置一直匹配到最后一处Total Members in Group的位置,正则的全匹配结果自然就是完整的字符串或者整行内容 - 你没有提取正则的捕获组内容:表达式里的
([\d.]+)已经正确捕获了冒号后的数字,你现在取的是全匹配结果,没有取第一个捕获组的返回值
调整方案
方案1:复用现有正则,调整取值逻辑
现有正则本身的捕获逻辑没有问题,你只需要在对应开发语言中调用捕获组提取方法即可,不同语言的示例如下:
- PHP:执行
preg_match($regex, $目标字符串, $matches)后,取$matches[1]即可得到目标数字 - Python:执行
re.search(regex, 目标字符串)后,调用返回结果的group(1)方法即可 - JavaScript:执行
目标字符串.match(regex)后,取返回数组的下标1的值即可
方案2:简化正则,降低匹配开销
不需要匹配完整的字符串,直接定位目标片段即可,正则可以简化为:\bTotal Members in Group: *([\d.]+)
这个正则不需要开启单行模式,匹配性能更高,也不会因为字符串内存在多处匹配内容出现误匹配的问题。
优化建议
- 如果确认冒号后只有整数没有小数,可以把捕获规则简化为
(\d+),匹配更精准 - 如果数值可能带正负号,可以把捕获规则调整为
([+-]?[\d.]+)
内容的提问来源于stack exchange,提问作者dcaz
相关产品推荐
相关产品推荐

