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

如何用Python正则匹配以#开头的字母数字子串?

正则提取以#开头的字母数字子串

需求:从文本test, test12, #test3, #test4 - : test555中提取所有以#开头、后续仅包含字母数字的子串,期望结果为['#test3', '#test4']。

之前尝试的正则存在的共性问题:

  • 使用.*(贪婪匹配)会过度匹配,从第一个#开始一直拉取到最后一个符合排除规则的字符,结果混入了多个目标子串和中间的无关符号
  • 使用.*?(非贪婪匹配)虽然会分段匹配,但会把目标子串后的非字母数字字符(比如逗号、空格)也包含进结果里

正确的正则表达式写法有两种,按需选择:

  • 简洁写法(\w匹配字母、数字、下划线,适合无下划线的场景):r"#\w+"
  • 精确写法(仅匹配字母和数字):r"#[a-zA-Z\d]+"

代码示例:

import re
text123 = "test, test12, #test3,  #test4 - : test555"

# 简洁写法输出
print(re.findall(r"#\w+", text123))  # 结果: ['#test3', '#test4']

# 精确写法输出
print(re.findall(r"#[a-zA-Z\d]+", text123))  # 结果: ['#test3', '#test4']

原理:+表示匹配前面的字符至少一次,\w或[a-zA-Z\d]精准限定了#之后的字符范围,匹配到第一个非字母数字字符时自动停止,刚好得到完整的目标子串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:52:46