RegEx для сопоставления символа, за которым следует или предшествует другой символ или оба, но не ни - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь сопоставить дефис, если ему предшествуют или следуют пробелы или оба, но не отдельный дефис.Хотя несколько каналов решат эту проблему (похоже на вопрос, который уже задавался, но не тот же), я хотел знать, существует ли прямое решение.

Например.Я хочу сопоставить (предположим, . - это пробел для форматирования) .-. или .- или -., но не просто -.

текущее выражение:

/ *- */g

соответствует всем этим.

Есть ли способ иметь 1 или более, но для совокупности, как минимум в одном пробеле до или после дефиса?

Редактировать: больше контекста

Яобработка нескольких выражений:

aln = re.compile(r'[^ \-a-zA-Z0-9]+')  # matches non space or - or alphanumeric characters
spc = re.compile(' +')  # matches one or more spaces

url_data = song + '-' + artist
url_data = re.sub(aln, '', url_data)  # remove punctuation and other characters
url_data = re.sub(spc, '-', url_data)  # substitute one or more spaces to -

Например.если песня ABC, XYZ, а исполнитель PQR, то, наконец, я получаю PQR-ABC-XYZ.

Однако, если песня имеет форму , ABC , и исполнителя PQR, тогда я получаю PQR--ABC-, пока яwant PQR-ABC.

Если я обновлю spc до *- *| +, то в обычных случаях (первый пример) он будет избыточно соответствовать дефису и заменяет его только дефисом, который я пытаюсь улучшить.

1 Ответ

0 голосов
/ 21 апреля 2019

Eg. I want to match (assume . to be a space for formatting) .-. or .- or -. but not just -

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

По вашей аналогии точка , это просто
(?=[.-]*\.)\.*-\.*

https://regex101.com/r/ivtl8z/1

Подставляя пробел для точки, получаемthis (пробел в классе для визуального воздействия)
(?=[ -]*[ ])[ ]*-[ ]*

в противном случае this (в виде строки)

regex = '(?=[ -]* ) *- *'  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...