RegEx: захват точки с запятой в кавычках и по крайней мере один символ - PullRequest
1 голос
/ 20 мая 2019

Мне нужно регулярное выражение (которое работает в notepad ++), которое захватывает точки с запятой, заключенные в кавычки, и где между кавычкой и точкой с запятой стоит хотя бы один символ.

  • Эта точка с запятой должна соответствовать: "asdf;a3"
  • Эта точка с запятой не должна совпадать: ";"

До сих пор у меня есть следующее регулярное выражение: \"(.*?)\"

Однако это соответствует всему, что находится в кавычках. Мне нужна только точка с запятой в качестве совпадения.

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Вы можете использовать группу захвата и отрицательный класс символов , не соответствующий ни одному из перечисленных символов:

 "[^";]+(;)[^;"]+"

Regex demo

Или используйте \K, чтобы забыть о том, что было написано, и положительный взгляд:

"[^;"]+\K;(?=[^;"]+")

Regex demo

Чтобы сопоставить несколько точек с запятой между двойными кавычками, вы можете использовать \G

Объяснение

(?:"|\G(?!^))[^";]+\K;(?=[^"]+")
  • (?: Группа без захвата
    • " Совпадение "
    • | или
    • \G(?!^) Утверждение позиции в конце предыдущего матча, а не в начале
  • ) Закрыть группу без захвата
  • [^";]+ Совпадение 1+ раз, а не " или '
  • \K; Забудьте, что было найдено, и сопоставьте ;
  • (?=[^"]+") Позитивный взгляд, утверждают, что то, что справа, в 1+ раз не ", а затем соответствует "

Regex demo

Примечание: если вы не хотите сопоставлять символы новой строки, вы можете добавить это в класс символов [^;"\r\n]

0 голосов
/ 20 мая 2019

Попробуйте это регулярное выражение:

/.+?\;.+?/g

Здесь является ссылкой, которая поможет вам понять поток этого регулярного выражения.

Здесь ссылка, показывающая демонстрацию этого регулярного выражения.

...