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

如何让Regex仅匹配以特定字符串开头行中的单个单词?

如何用正则匹配特定角色台词中的所有单词

需求

匹配每行格式为[NAME]: [DIALOGUE]的文本里,特定角色的所有台词单词。例如只提取Romeo: I love you Juliet中的每个单词,完全忽略Juliet: I love you Romeo里的内容。

我试过的方法及问题

  • 一开始想用后行断言写了(?<=NAME:[.*])\w+,但没有任何匹配结果,后来发现是错误使用了方括号[.*]导致的。
  • 修改成(?<=^NAME:).*\w+,结果会匹配整行对话,而不是单个单词。
  • 参考其他案例改出\ANAME:.*\w+\s(?<\w+>\d+)\s\z和\ANAME:.*\w+\s(?\w+\d+)\s\z,但都因为\w+的转义问题报“bad escape”错误。
  • 直接用另一个案例里的表达式(^@property|(?!^)\G)(.*? )\K([^-\n]\w+),同样报“bad escape”错误。

可行解决方案

方法1:用\G锚点逐词匹配(支持PCRE、Python 3.10+、Java等)

这个表达式能精准匹配目标角色行里的每一个单词:

(^Romeo:|\G(?!^)).*?\K\w+
  • 细节解释:
    • ^Romeo::锁定以目标角色名开头的行
    • \G(?!^):保证后续匹配和上一个结果在同一行内连续
    • .*?\K:跳过角色名后到当前单词前的所有内容,重置匹配起始位置
    • \w+:匹配单个单词

方法2:可变长度后行断言+全局匹配(支持JavaScript ES2018+、Python等)

如果你的正则引擎支持可变长度后行断言,也可以用这个表达式(记得开启全局匹配模式):

\w+(?<=^Romeo:.*)

注意要按行处理文本,确保只针对目标角色的行进行匹配。

方法3:分步处理(兼容所有正则引擎)

如果引擎不支持复杂特性,分成两步更稳妥:

  1. 先筛选出目标角色的行:^Romeo:.*
  2. 对筛选出的行,用\w+提取所有单词

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:12:54