如何用正则表达式提取指定字符串中括号前的任意数量单词?
正则表达式匹配括号前的任意数量单词
要捕获(599|C07)这类括号前的任意数量单词,不需要硬编码单词个数,有两种实用方案:
方案1:通用匹配(兼容任意字符)
使用非贪婪匹配捕获左括号前的所有内容:
^(.*?)\s*\(
^锚定字符串开头,避免匹配中间的括号(.*?)非贪婪捕获任意字符,直到遇到后续的空格和左括号\s*匹配括号前的任意数量空格(包括0个)\(匹配左括号(转义是因为括号在正则里是特殊元字符)
测试示例字符串Comet TV Hd (599|C07)时,捕获组1会精准得到Comet TV Hd。
方案2:精准匹配单词类内容
如果只需要捕获由单词字符(字母、数字、下划线)和空格组成的内容,用字符集限制更严谨:
^([\w\s]+?)\s*\(
[\w\s]+?非贪婪匹配任意数量的单词字符和空格,过滤掉非单词类的意外字符- 其余部分和方案1一致,适合明确只有单词和空格的场景
注意点
- 一定要用非贪婪模式的
?,否则如果字符串存在多个括号,会匹配到最后一个括号前的所有内容,不符合预期 - 如果需要兼容其他字符(比如节目名里的
.、-),可以扩展字符集,比如改成[\w\s\.\-]+?
内容的提问来源于stack exchange,提问作者Neha
相关产品推荐
相关产品推荐

