Regex - найти все пробелы и игнорировать разделенные дефисом слова в многострочной строке - PullRequest
0 голосов
/ 03 марта 2020

Я хочу создать шаблон регулярного выражения, который находит пробелы и игнорирует слова, разделенные дефисом.

Основное правило c состоит в том, чтобы находить любые последующие пробелы ([\s]+), а не найти пробелы, где шаблон:

[\S]+-[\s]+[\S]+ (шаблон, которому я не хочу соответствовать пробелы)

Любые другие пробелы должны совпадать.

Соответствующие интервалы должны включать только пробелы, а не другие символы.

Например:

ab c ab c

должно совпадать в позиции 3-4.

ab c
def

должно совпадать с конца ab c до начала def.

ab c -

def

не должно совпадать.

ab c -

def

должно совпадать при 3-4, 5-6.

Найденная строка многострочная и имеет много вхождений пробелов, и я хочу найти все они в одном поиске.

Перепробовал много разных шаблонов (с отрицательным прогнозом и просмотром сзади), но ни один не смог применить для всех случаев.

Использование python встроенного re модуля.

Возможно выполнить два поиска:

  1. поиск всех вхождений [\s]+

  2. поиск всех вхождений [\S]+-([\s]+)[\S]+

  3. удалить совпадения группы в (2) из ​​совпадений в (1)

Возможно ли выполнить один поиск?

1 Ответ

0 голосов
/ 03 марта 2020

Как насчет этого:

(?<![\s\-])[\s](?!\-\s\n)
  1. (?<![\s\-]) не смотреть пробел после пробела и -: (негативный взгляд сзади)
  2. (?!\-\s\n) не смотреть пробел раньше - пробел и новая строка: (отрицательный взгляд вперед)

Отредактировано:

Попробуйте это:

(?<![\s])[\s+](?!\-\s\n)(?!\n{2})

После просмотра данных образца, некоторые из них содержат двойную новую строку, поэтому:

  1. (?<![\s]) не смотреть после пробела
  2. (?!\-\s\n) не смотреть до da sh, пробела и новой строки
  3. (?!\n{2}) не смотри перед двойным переводом строки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...