如何用正则表达式提取字符串中%后的首个单词并获取全部匹配项
提取字符串中每个%后的首个单词并拼接成逗号分隔结果
你的正则表达式%\W*(\w+)本身是正确的,问题出在没有启用全局匹配模式,导致只匹配到第一个结果。以下是具体实现方法:
核心思路
- 保留原正则,开启全局匹配以遍历整个字符串找到所有符合条件的项
- 提取每个匹配结果中的捕获组内容(即%后的首个单词)
- 将所有提取到的单词用逗号拼接成最终字符串
代码示例
Python实现
import re target_str = "60% Bob Peterson, 35% Jake Peter Sullivan, 5% Maria Teresa" # 使用findall直接获取所有捕获组内容 name_list = re.findall(r'%\W*(\w+)', target_str) # 拼接成逗号分隔的字符串 result = ', '.join(name_list) print(result) # 输出:Bob, Jake, Maria
JavaScript实现
const targetStr = "60% Bob Peterson, 35% Jake Peter Sullivan, 5% Maria Teresa"; const regex = /%\W*(\w+)/g; const nameList = []; let matchResult; // 循环遍历所有匹配结果 while ((matchResult = regex.exec(targetStr)) !== null) { nameList.push(matchResult[1]); } const result = nameList.join(', '); console.log(result); // 输出:Bob, Jake, Maria
说明
%\W*(\w+)的含义:匹配%符号,接着匹配任意数量的非单词字符(空格等),最后捕获第一个连续的单词字符序列(即我们要的名字)- 全局匹配模式在不同语言中的开启方式:Python的
re.findall默认会返回所有捕获组结果;JavaScript需要在正则后加g标志,再通过循环exec获取所有匹配项
内容的提问来源于stack exchange,提问作者SuperOcean
相关产品推荐
相关产品推荐

