Add/Remove hyphens/dashes 来自带有 REGEX 的特定单词列表(美式英语与英式英语)

Add/Remove hyphens/dashes from list of specific words with REGEX (American vs British English)

我正在尝试 add/remove 从文档中非常具体的单词列表中添加连字符,例如:

前面提到的,基线,启动>> 前面,基线,启动

我想为此写一个 REGEX 行,因为任务和模式总是相同的:add/remove 来自已知单词对的连字符。当然,我可以为每一对使用单独的 REGEX 操作来做到这一点,但这非常笨拙且占用资源:

(afore)-(mention) >> 
(base)-(line) >> 
(start)-(up) >> 
etc.

这似乎是一种更简单的方法:

(?:(afore)-(mention)|(base)-(line)|(start)-(up))    >> 

问题是这为每个匹配项提供了一个新的反向引用,这是没有用的。我可以制作两个列表,但是我会得到我不想要的奇怪匹配,如果列表变长,这就会成为一个问题,并且可能会出现随机匹配(前线 >> 前线,基础向上 >> 基础,等):

(?:(afore|base|start)-(mentioned|line|up))  >> 

有什么想法吗?提前致谢!

您可以使用 (?<s>...)(?'s'...) 语法来使用 named capturing groups

(?<s>afore)-(?<r>mention)|(?<s>base)-(?<r>line)|(?<s>start)-(?<r>up)

或者,要仅匹配整个单词,请添加单词边界:

\b(?:(?<s>afore)-(?<r>mention)|(?<s>base)-(?<r>line)|(?<s>start)-(?<r>up))\b

替换为${s}${r}

参见regex demo

连字符之前的任何部分都将出现在 s 命名捕获中,第二部分将出现在组 r 中。 .NET 正则表达式中的命名反向引用语法是

${name}

演示截图: