Python: как получить несколько элементов в квадратных скобках

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

[xy][abc]

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

  • xy
  • abc

нет скобок внутри скобок. Неверный:[[abc][def]]

пока у меня есть это:

import re
pattern = "[xy][abc]"
x = re.compile("[(.*?)]")
m = outer.search(pattern)
inner_value = m.group(1)
print inner_value

но это дает мне только внутреннее значение первых квадратных скобок.

какие идеи? Я не хочу использовать функции разделения строк, я уверен, что это возможно как-то с RegEx самостоятельно.

3 ответов


re.findall ваш друг здесь:

>>> import re
>>> sample = "[xy][abc]"
>>> re.findall(r'\[([^]]*)\]',sample)
['xy', 'abc']

>>> import re
>>> re.findall("\[(.*?)\]", "[xy][abc]")
['xy', 'abc']

Я подозреваю, что вы ищете re.findall.

посмотреть демо:

import re
my_regex = re.compile(r'\[([^][]+)\]')
print(my_regex.findall('[xy][abc]'))
['xy', 'abc']

если вы хотите перебирать совпадения вместо строк соответствия, вы можете посмотреть re.finditer. Дополнительные сведения см. В разделе Python re docs.