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

如何用正则表达式提取指定URL中的目标纯数字?

解决URL中提取指定数字的正则问题

问题分析

你需要从两种格式的URL中提取79084和64931这两个纯数字,同时排除/t/路径片段,之前的正则因为贪婪匹配的问题没能得到预期结果。

正确正则方案

方案1:精准匹配固定结构(推荐)

针对你的URL固定结构https://sub.example.com/数字/t/数字[?参数],可以用带捕获组的正则直接定位两个数字:

sub\.example\.com\/(\d+)\/t\/(\d+)
  • 解释:(\d+)会分别捕获域名后的第一个数字,以及/t/后面的第二个数字,不管URL末尾有没有参数,都能精准提取。

代码示例(Python):

import re

urls = [
    "https://sub.example.com/79084/t/64931?Url=https%3a%2f%2fwww.test.com%2fpath%2fotherpath%2f",
    "https://sub.example.com/79084/t/64931"
]

pattern = r"sub\.example\.com\/(\d+)\/t\/(\d+)"
for url in urls:
    match_result = re.search(pattern, url)
    if match_result:
        target_nums = [match_result.group(1), match_result.group(2)]
        print(target_nums)  # 输出 ['79084', '64931']

方案2:全局匹配目标位置的数字

如果URL结构存在小范围变动,但数字始终在sub.example.com/之后和/t/之后,可以用正向断言全局匹配:

(?<=sub\.example\.com\/)\d+|(?<=\/t\/)\d+
  • 解释:(?<=sub\.example\.com\/)确保匹配的数字在域名之后,(?<=\/t\/)确保数字在/t/之后,|表示或逻辑,全局匹配即可拿到两个目标数字。

代码示例(Python):

import re

urls = [
    "https://sub.example.com/79084/t/64931?Url=https%3a%2f%2fwww.test.com%2fpath%2fotherpath%2f",
    "https://sub.example.com/79084/t/64931"
]

pattern = r"(?<=sub\.example\.com\/)\d+|(?<=\/t\/)\d+"
for url in urls:
    target_nums = re.findall(pattern, url)
    print(target_nums)  # 输出 ['79084', '64931']

之前正则的问题

你使用的(?<=\/sub.example.com\/)(.*)(?=\?[Uu]rl|$)中,.*是贪婪匹配模式,会把79084/t/64931整个字符串全部匹配到,而不是拆分出单独的数字,因此无法得到预期的数字数组。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:05:26