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

Regex to match character if not between digits

提问人:Recursing 提问时间:1/30/2020 最后编辑:Recursing 更新时间:1/30/2020 访问量:252

问:

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

在它应该匹配a-b-

在它应该匹配a-4-

在它应该匹配3-a-

在它应该不匹配3-4

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

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

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

与正则 语言无关的正 则表达式环形查询

评论


答:

2赞 Zaelin Goodman 1/30/2020 #1

以下内容适用于此方案。确保你选择的正则表达式风格有条件,否则这将不起作用:

-(?(?=\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

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

评论

0赞 Recursing 1/30/2020
我不知道条件,谢谢!我想我只需要,因为我明确需要只匹配字符,而不是周围的数字(?(?<=\D)-|-(?=\D))
1赞 Zaelin Goodman 1/30/2020
为此,我添加了一个更快、更简单的正则表达式的编辑。它只会匹配-
0赞 Recursing 1/30/2020
更简单的版本正是我想要的,再次感谢!也许它应该取代答案的其余部分
0赞 Zaelin Goodman 1/30/2020
将答案更新为只有新的答案,现在您已经确认这是您要找的!很高兴我能帮上忙!
1赞 The fourth bird 1/30/2020 #2

另一种选择是,当左边不是数字时,使用交替来匹配 a,或者在右边不是数字时匹配 a:--

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

正则表达式演示