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}
演示截图:
我正在尝试 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}
演示截图: