从REGEX(美式英语与英式英语)的特定单词列表中添加删除连字符破折号。

问题描述 投票:0回答:1

我试图从文档中的一个非常特殊的词列表中删除连字符,例如:。

afore-mention, base-line, start-up >> aforemention, baseline, startup。

我想为此写一个REGEX行,因为任务和模式总是一样的:从已知的词对中添加删除一个连字符。当然,我可以为每个词对单独编写REGEX操作,但这样做非常笨拙,而且耗费资源。

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

这似乎是一个更简单的方法。

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

问题是这样做会给每一个匹配提供一个新的回溯参考,而这是没有用的。我可以做两个列表,但这样我就会出现一些我不想要的奇怪的匹配,如果列表变长,这就成了一个问题,可能会出现随机匹配(afore-line >>aforeline,bas-up >>baseup,等等)。

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

有什么想法吗?先谢谢你

.net regex list backreference
1个回答
0
投票

您可以使用 命名采集组 使用 (?<s>...)(?'s'...) 语法。

(?<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}.

搜索引擎演示.

连字符之前的任何部分都会落在 s 命名为捕获,第二部分将在Group r. .NET regex中命名的反向引用语法是

${名称}

演示截图。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.