Тонкая настройка регулярных выражений для извлечения данных между разделителями - PullRequest
1 голос
/ 30 мая 2019

Я использую регулярное выражение VBA, и мне нужно извлечь только данные между двумя # разделителями (мне нужен только текст с любыми пробелами до и после удаления, а не # разделители).

Пока у меня есть этот шаблон:

^#\s*(.*)\s*#$

Введенные данные имеют несколько правил:

1. Always start with #
2. After the first # there may be zero or one spaces
3. After captured text there may be zero or one spaces before end of line
4. After captured text there may be zero or one # before end of line

Так, например:

# this is a test 
#this is a test
# this is a test#
# this is a test #

Во всех четырех случаях this is a test должно быть единственным возвращаемым значением.

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

Любая помощь приветствуется.

1 Ответ

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

Вы можете исправить свое текущее решение, используя

^#\s*(.*?)\s*#?$

См. Демонстрационную версию regex .Два основных момента: 1) (.*?) должен быть ленивым точечным шаблоном, 2) #? теперь имеет квантификатор ? для соответствия # 1 или 0 раз.

Однако вы также можете удалитьведущие / конечные совпадения с использованием Replace с шаблоном

^#\s*|\s*#?$

.Не забудьте установить регулярное выражение .Global = True.

См. еще одну демонстрацию регулярных выражений .

...