根据连字符的出现匹配句子中单词中连字符的正则表达式
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-]*-)
PCRE正则表达式解决方案:
这是一种在 PCRE 中将一行中的所有连字符与多个连字符匹配的方法:
(?:(?:^|\s)(?=(?:[^\s-]*-){2})|(?!^)\G)[^\s-]*\K-
解释:
[^\s-]*
匹配不是空格且不是连字符的字符
(?=(?:[^\s-]*-){2})
是前瞻性的,以确保 non-whitespace 子串 中至少有 2 个连字符
\G
断言位置在前一个匹配的末尾或第一个匹配的字符串的开头
\K
重置匹配信息
我正在尝试匹配单词中的连字符,但前提是连字符在所述单词中出现不止一次
因此,在短语“Step-By-Step”中,连字符将被匹配,而在短语“Coca-Cola”中,连字符将不被匹配。
在包含短语“Step-By-Step and Coca-Cola”的完整句子中,只有“Step-By-Step”中的连字符应该匹配。
我目前有以下表达式,但它匹配所有由非数字字符分隔的连字符,而不管出现的次数
((?=\D)-(?<=\D))
我似乎无法让量词与这个表达式一起工作,有什么想法吗?
这匹配至少两个单词,每个单词后跟连字符,然后是另一个单词(我假设您不想在开头或结尾使用连字符,只允许在单词之间使用连字符)。
(\w+-){2,}\w+
Java 正则表达式解决方案:
(?<=-[^\s-]{0,999})-|-(?=[^\s-]*-)
PCRE正则表达式解决方案:
这是一种在 PCRE 中将一行中的所有连字符与多个连字符匹配的方法:
(?:(?:^|\s)(?=(?:[^\s-]*-){2})|(?!^)\G)[^\s-]*\K-
解释:
[^\s-]*
匹配不是空格且不是连字符的字符(?=(?:[^\s-]*-){2})
是前瞻性的,以确保 non-whitespace 子串 中至少有 2 个连字符
\G
断言位置在前一个匹配的末尾或第一个匹配的字符串的开头\K
重置匹配信息