Регулярное выражение для сопоставления символа, если не между цифрами - PullRequest
0 голосов
/ 29 января 2020

Мне нужно сопоставить символ, чтобы разбить большую строку, скажем, -, но не в том случае, если она между двумя цифрами

В a-b она должна соответствовать -

В a-4 должно совпадать -

В 3-a должно совпадать -

В 3-4 не должно совпадать

Я пробовал отрицательный взгляд вперед и назад, но я только смог придумать это (?<=\D)-(?=\D)|(?<=\d)-(?=\D)|(?<=\D)-(?=\d)

Есть ли более простой способ указать этот шаблон?

Редактировать: используя условные выражения регулярного выражения, я думаю, что можно использовать (?(?<=\D)-|-(?=\D))

Ответы [ 2 ]

2 голосов
/ 29 января 2020

Следующее будет работать для этого сценария. Убедитесь, что у вашего предпочтения 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

Без замены в качестве замены, поскольку da sh - единственный захваченный символ.

1 голос
/ 29 января 2020

Другой вариант - использовать чередование , чтобы соответствовать -, когда слева не ди git, или совпадать с -, когда справа не ди git :

(?<!\d)-|-(?!\d)
  • (?<!\d)- Отрицательный взгляд сзади, утверждают, что то, что слева, не является ди git и соответствует -
  • | или
  • -(?!\d) Совпадение - и утверждение того, что справа, не является ди git с использованием отрицательного взгляда

Regex demo

...