Регулярное выражение Python: исключая квадратные скобки и текст внутри - PullRequest
2 голосов
/ 23 сентября 2019

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

Мой пример текста выглядит следующим образом: 'WordA, WordB, WordC, [WordD]'

Я хочу сопоставить каждый текстовый элемент встрока кроме '[WordD]'.Я пытался использовать отрицательный взгляд, что-то вроде ... [A-Z][A-Za-z]+(?!\[[A-Z]+\]), но при этом все равно соответствовал тексту в скобках.

Является ли отрицательный взгляд лучшим способом?Если так, то где я иду не так?

Ответы [ 3 ]

2 голосов
/ 23 сентября 2019

Вместо регулярного выражения вы можете рассмотреть возможность разделения на запятые, а затем фильтрации по тому, начинается ли слово с [:

output = [word for word in str.split(', ') if word[0] != '[']

Если вы используете регулярное выражение, вы можете сопоставить любое началострока или заглядывание за пробелом:

re.findall(r'(?:^|(?<= ))[A-Z][A-Za-z]+', str)

Или вы можете отрицательно заглянуть на ] в конце, после границы слова:

output = re.findall(r'[A-Z][A-Za-z]+\b(?!\])', str)
0 голосов
/ 23 сентября 2019

Я предполагаю, что, возможно, вы пытались написать какое-то выражение, похожее на:

[A-Z][a-z]*[A-Z](?=,|$)

или

[A-Z][a-z]+[A-Z](?=,|$)

Тест

import re


regex = r"[A-Z][a-z]*[A-Z](?=,|$)"
string = """
WordA, WordB, WordC, [WordD]
WordA, WordB, WordC, [WordD], WordE
"""

print(re.findall(regex, string))

Вывод

['WordA', 'WordB', 'WordC', 'WordA', 'WordB', 'WordC', 'WordE']

Если вы хотите упростить / изменить / изучить выражение, это было объяснено на верхней правой панели regex101.com .Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами ввода.


0 голосов
/ 23 сентября 2019

Это может быть просто:

(\w+),

Regex Demo

Получить значение группы 1 для желаемого результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...