如果不在数字之间,则正则表达式匹配字符
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)
匹配 -
并断言右边的不是使用否定前瞻的数字
我需要匹配一个字符来拆分一个大字符串,比方说 -
,但如果它在两个数字之间则不需要
在 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)
匹配-
并断言右边的不是使用否定前瞻的数字