如果不在数字之间,则正则表达式匹配字符

Regex to match character if not between digits

我需要匹配一个字符来拆分一个大字符串,比方说 -,但如果它在两个数字之间则不需要

a-b 中它应该匹配 -

a-4中它应该匹配-

3-a中它应该匹配-

3-4中它不应该匹配

我试过负前瞻和后视,但我只能想出这个(?<=\D)-(?=\D)|(?<=\d)-(?=\D)|(?<=\D)-(?=\d)

是否有更简单的方法来指定此模式?

编辑:使用正则表达式条件我想我可以使用 (?(?<=\D)-|-(?=\D))

以下内容适用于此场景。确保您选择的 Regex 风格有条件,否则这将不起作用:

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

-         // match a dash
(?        // If
   (?=\d) // the next character is a digit
   (?<=   // then start a lookbehind (assert preceding characters are)
      \D- // a non-digit then the dash we matched
   )      // end lookbehind
)         // end conditional

没有任何替代,因为破折号是唯一捕获的字符。

另一种选择是当左边不是数字时使用alternation匹配-或当右边不是数字时匹配-

(?<!\d)-|-(?!\d)
  • (?<!\d)- 否定向后看,断言左边的不是数字并匹配 -
  • |
  • -(?!\d) 匹配 - 并断言右边的不是使用否定前瞻的数字

Regex demo