首页 > 解决方案 > 需要正则表达式来拒绝重复

问题描述

我的测试字符串是: Named_Hires!$W$16:$W$87 + Calc_Named_HC!AD$32:AD$103 +A + Named_Hires!$W$16:$W$87

我的正则表达式是\w+(?=!)

它工作正常并提取 Named_Hire、Calc_Named_H 和 Named_Hires

我想消除重复项,这样第二个 Named_Hires 就不会被提取 TIA

标签: regexgoogle-apps-script

解决方案


该模式\w+(?=!)匹配 1+ 个单词字符,断言右侧的内容是!

如果你想断言整个模式只出现一次,你可以使用一个捕获组\w+并将该组包装在另一个组中添加!也是。

然后,您可以使用否定前瞻断言整个组确实出现一次,并从第二组中获取单词字符。

您的比赛在第二个捕获组中。

((\w+)!)(?!.*\1)
||
|Group 2
|
Group 1

解释

  • (捕获组 1
    • (\w+)捕获第 2 组,匹配 1+ 个单词字符
    • !从字面上匹配
  • )关闭组 1
  • (?!负前瞻,断言右边的不是
    • .*\1匹配任何字符 0+ 次,后跟对第 1 组的反向引用
  • )关闭负前瞻

正则表达式演示


推荐阅读