根据连字符的出现匹配句子中单词中连字符的正则表达式

Regex expression to match on hyphens in words within sentence based on occurrences of hyphen

我正在尝试匹配单词中的连字符,但前提是连字符在所述单词中出现不止一次

因此,在短语“Step-By-Step”中,连字符将被匹配,而在短语“Coca-Cola”中,连字符将不被匹配。

在包含短语“Step-By-Step and Coca-Cola”的完整句子中,只有“Step-By-Step”中的连字符应该匹配。

我目前有以下表达式,但它匹配所有由非数字字符分隔的连字符,而不管出现的次数

((?=\D)-(?<=\D))

我似乎无法让量词与这个表达式一起工作,有什么想法吗?

这匹配至少两个单词,每个单词后跟连字符,然后是另一个单词(我假设您不想在开头或结尾使用连字符,只允许在单词之间使用连字符)。

(\w+-){2,}\w+

Java 正则表达式解决方案:

(?<=-[^\s-]{0,999})-|-(?=[^\s-]*-)

Java RegEx Demo


PCRE正则表达式解决方案:

这是一种在 PCRE 中将一行中的所有连字符与多个连字符匹配的方法:

(?:(?:^|\s)(?=(?:[^\s-]*-){2})|(?!^)\G)[^\s-]*\K-

RegEx Demo

解释:

  • [^\s-]* 匹配不是空格且不是连字符的字符
  • (?=(?:[^\s-]*-){2}) 是前瞻性的,以确保 non-whitespace 子串
  • 中至少有 2 个连字符
  • \G 断言位置在前一个匹配的末尾或第一个匹配的字符串的开头
  • \K 重置匹配信息