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

Python正则表达式匹配连字符字符串:寻求更简洁实现方案

简化正则表达式提取带连字符的子串

嘿,当然有更简洁的写法啦!你当前的正则是重复写\w+-三次再收尾,其实咱们可以用正则的重复语法来简化,让表达式更灵活也更易读~

核心优化思路

你要匹配的是「由连字符分隔的多段单词字符(字母、数字、下划线)」,原来的写法\w+-\w+-\w+-\w+只能固定匹配3个连字符、4段内容的格式,而我们可以用非捕获组+重复限定符来实现更通用且简洁的匹配:

  • \w+:匹配第一段单词字符
  • (?:-\w+)+:非捕获组(?:表示不保存分组结果,更高效),匹配「连字符+一段单词字符」的组合,+表示这个组合可以出现1次或多次

这样整个正则r'\w+(?:-\w+)+'就能匹配任意包含1个及以上连字符的目标子串,既覆盖了你当前的需求,还能适配更多类似格式的字符串(比如A-B、X-Y-Z-123这类)。

优化后的代码示例

import re
some = "I cannot take this B01234-56-K-9870 to the house of cards"
# 更简洁且通用的正则表达式
regex = r'\w+(?:-\w+)+'
match = re.search(regex, some)
print(match.group()) # 同样返回 B01234-56-K-9870

额外小提示

如果需要确保匹配的子串是独立的单词(避免和其他字符粘连,比如如果字符串里有testB01234-56这种情况),可以加上单词边界\b,正则改成:

r'\b\w+(?:-\w+)+\b'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:35:34