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

如何匹配含N个非连续特定字符的单词?以提取3个下划线的唯一ID为例

提取含三个下划线的唯一ID:正则方案替代split临时方法

嘿,我明白你现在的需求——从字符串里揪出那个带三个下划线的唯一ID,你用split的临时方法确实能跑通,但用正则表达式会更简洁且健壮,刚好精准匹配你说的「包含三个下划线的单个单词」。

先回顾下你的场景和现有实现:

示例字符串:text = "Hello World, aaaa_dddd_bbbb_cccc"
现有临时方案:

unique_id = None
for word in text.split(' '):
    if len(word.split("_")) > 2:
        unique_id = word

这个方法逻辑很直观,但有个小问题:如果目标ID后面跟着标点(比如示例里的逗号),split出来的word会带着逗号,虽然len(word.split("_"))还是4,但实际你要的ID是不带标点的对吧?这时候正则就能完美解决这个问题。

正则表达式解法

直接用这个正则就能精准匹配包含且仅包含三个下划线的单词:

\b\w+(?:_\w+){3}\b

正则拆解:

  • \b:单词边界,确保我们匹配的是完整的单词,不会把长字符串里的片段当成目标,同时自动忽略单词前后的标点(比如示例里的逗号)
  • \w+:匹配至少一个字母、数字或下划线(也就是单词的起始部分)
  • (?:_\w+){3}:非捕获组,重复3次「下划线+至少一个字符」的组合,刚好对应三个下划线的要求
  • 整个组合起来就是:匹配一个完整的、包含三个下划线的单词

代码实现

import re

text = "Hello World, aaaa_dddd_bbbb_cccc"
# 用re.search查找第一个匹配的目标(如果有多个可以用re.findall)
match_result = re.search(r'\b\w+(?:_\w+){3}\b', text)
unique_id = match_result.group() if match_result else None

print(unique_id)  # 输出:aaaa_dddd_bbbb_cccc

两种方法对比

  • 你的split方法:简单易懂,适合快速写逻辑,但对带标点的单词处理不够友好,需要额外做清洗
  • 正则方法:代码更简洁,自动处理单词边界和标点,适配更多边缘场景(比如ID在字符串开头/结尾、前后有其他标点等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:22:52