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

正则表达式需求:从两种格式字符串中提取数字

当然可行!两种方案轻松解决你的需求

针对你提到的两种格式字符串(<@&!302050872383242240> 和 <@&302050872383242240>),不管是提取其中的数字,还是直接移除前缀标识,用正则表达式都能快速实现,下面给你具体的实现思路和代码示例:

方案1:直接提取数字

核心思路是匹配字符串中的连续数字序列——你的场景里数字是唯一的连续数字部分,用最简单的正则就能搞定:

正则表达式

\d+ —— 匹配一个或多个连续数字

代码示例(Python)

import re

target_strings = ["<@&!302050872383242240>", "<@&302050872383242240>"]
for s in target_strings:
    # 搜索并提取数字
    num_match = re.search(r'\d+', s)
    if num_match:
        print(f"提取到的数字:{num_match.group()}")

更精准的正则(可选)

如果你想确保只匹配被<@&!或<@&>包裹的数字,可以用正向/反向预查来限制匹配范围:
(?<=<@&!?)\d+(?=>)

  • (?<=<@&!?): 反向预查,确保前面是<@&或<@&!
  • \d+: 匹配连续数字
  • (?=>): 正向预查,确保后面是>

方案2:移除标识,保留数字

核心思路是把字符串开头的<@&!/<@&和结尾的>替换为空,直接得到纯数字:

正则表达式

^<@&!?|>$

  • ^<@&!?: 匹配字符串开头的<@&或<@&!(?表示!是可选的)
  • |>: 匹配字符串结尾的>
  • 整体意思是匹配开头的标识或结尾的>,然后替换为空

代码示例(Python)

import re

target_strings = ["<@&!302050872383242240>", "<@&302050872383242240>"]
for s in target_strings:
    # 移除标识
    cleaned_str = re.sub(r'^<@&!?|>$', '', s)
    print(f"清理后的结果:{cleaned_str}")

JavaScript 版本示例

const targetStrings = ["<@&!302050872383242240>", "<@&302050872383242240>"];
targetStrings.forEach(str => {
    // 提取数字
    const number = str.match(/\d+/)[0];
    console.log("提取到的数字:", number);
    
    // 移除标识
    const cleanedStr = str.replace(/^<@&!?|>$/g, '');
    console.log("清理后的结果:", cleanedStr);
});

两种方案都能完美处理你提到的两种格式,你可以根据自己的具体使用场景选择更适合的方式~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:07:35