2016-08-09 3 views
1

Я хочу, чтобы извлечь строку внутри квадратных скобок, который задается в виде массиваПолучить строку внутри скобок

u16 arrayName_1[8][7] 

У меня есть питон код, который может найти 1-мерный массив и получить символ внутри Squre скобки.

var = 'u16 arrayName_1[8]' 
index = re.split('\[(.*?)\]', str(var)) 

индекс [0] предоставит 'u16 arrayName_1'.

индекс [1] даст значение «8».

Проблема: Я хочу получить строку внутри скобок 2D-массива. Я попробовал код ниже, но это нежелательный результат.

var = u16 arrayName_1[8][7] 
index= re.split('(\[.*\])$', str(var)) 

индекс [0] предоставит 'u16 arrayName_1'.

индекс [1] даст значение [8] [7] '. Это неправильный результат.

Я хочу выход как:

индекс [1] = '8'

индекс [2] = '7'

+0

Вы попробовали * сопоставление * с вашим рисунком? ['re.findall (r '\ [(. *?) \]', str (var))'] (https://ideone.com/JFfHYD) –

+0

Нет, я пытаюсь выполнить re.findall. – user2030113

ответ

3

Вы можете использовать свой собственный шаблон в re.findall, чтобы захватить все содержимое внутри [...]:

import re 
var = 'u16 arrayName_1[8][7]' 
index = re.findall(r'\[(.*?)\]', var) 
print(index) # => ['8', '7'] 

См Python demo

Чтобы соответствовать только цифрам внутри, используйте \[([0-9]+)] regex. Кроме того, вам не нужно избегать символа ] вне класса символов, и вам следует рассмотреть использование строковых литералов строк для определения ваших шаблонов регулярных выражений, чтобы избежать путаницы с необработанными обратными косыми чертами.

+0

Примечание: Это не работает, если индекс имеет индекс, как в 'foo [bar [1]]'. (Это не было требованием, просто хотелось указать ограничения ...) –

+0

Да, поэтому я также предложил '\ [([0-9] +)]'. –

Смежные вопросы