如何使用Regex提取指定格式字符串列表中的gb2等子串?
提取目标子串的正则解决方案
先明确咱们要抓的核心内容:这些gb2、de7这类子串,都是vps-前缀之后、.nsa.drw后缀之前的「两个小写字母+数字」组合。下面直接上可落地的正则方案和用法:
核心正则表达式
用这个正则就能精准捕获目标内容:
vps-([a-z]{2}\d+)
正则拆解(帮你理解为什么这么写)
vps-:匹配固定前缀,确保我们定位到正确的位置,不会误抓其他类似结构的内容():捕获组,专门用来提取我们真正需要的子串[a-z]{2}:精准匹配两个小写英文字母(对应gb、de、jp这类部分)\d+:匹配一个或多个数字(对应后面的2、7、3这类部分)
实际使用示例(主流语言)
Python 实现
import re # 你的原始字符串列表 target_strings = [ "Heartbeats::hype-wss://vps-gb2.nsa.drw:7026", "Heartbeats::hype-wss://vps-de7.nsa.drw:7026", "Heartbeats::hype-wss://vps-gb3.nsa.drw:7006", "Heartbeats::hype-wss://vps-de2.nsa.drw:7043", "Heartbeats::hype-wss://vps-jp2.nsa.drw:7060", "Heartbeats::hype-wss://vps-jp2.nsa.drw:7071", "Heartbeats::hype-wss://vps-de3.nsa.drw:7055", "Heartbeats::hype-wss://vps-de3.nsa.drw:7066", "Heartbeats::hype-wss://vps-gb2.nsa.drw:7005" ] # 编译正则(提升重复匹配效率) pattern = re.compile(r'vps-([a-z]{2}\d+)') # 批量提取结果 extracted_results = [pattern.search(s).group(1) for s in target_strings if pattern.search(s)] print(extracted_results) # 输出:['gb2', 'de7', 'gb3', 'de2', 'jp2', 'jp2', 'de3', 'de3', 'gb2']
JavaScript 实现
const targetStrings = [ "Heartbeats::hype-wss://vps-gb2.nsa.drw:7026", "Heartbeats::hype-wss://vps-de7.nsa.drw:7026", "Heartbeats::hype-wss://vps-gb3.nsa.drw:7006", "Heartbeats::hype-wss://vps-de2.nsa.drw:7043", "Heartbeats::hype-wss://vps-jp2.nsa.drw:7060", "Heartbeats::hype-wss://vps-jp2.nsa.drw:7071", "Heartbeats::hype-wss://vps-de3.nsa.drw:7055", "Heartbeats::hype-wss://vps-de3.nsa.drw:7066", "Heartbeats::hype-wss://vps-gb2.nsa.drw:7005" ]; const regex = /vps-([a-z]{2}\d+)/; const extractedResults = targetStrings.map(str => { const match = str.match(regex); return match ? match[1] : null; }).filter(item => item !== null); console.log(extractedResults); // 输出:["gb2", "de7", "gb3", "de2", "jp2", "jp2", "de3", "de3", "gb2"]
扩展说明
如果后续你的字符串格式有变化(比如字母数量从2个变成3个),只需要调整正则里[a-z]{2}的数字即可,比如改成[a-z]{3}就能匹配三个字母的前缀。
内容的提问来源于stack exchange,提问作者singard
相关产品推荐
相关产品推荐

