2012-04-02 1 views
0

Я хотел бы найти первое вхождение строки после некоторой другой строки и между определенным шаблоном. Документы, которые я обрабатываю, не являются xml, но имеют аналогичные правила начала/конца. и пример того, что я смотрел бы на:шаблон соответствия между символами, после заданного шаблона

...b.filext", "{xxxxx-xxx-xxx-xxx-xxxxxxxxxxx}" 

и я пытаюсь получить строку между {и}, сразу после появления vcxproj, каждый раз, когда это происходит в документе. Я попытался следующие, но я получаю список None:

my_list=[] 
for line in text.split('.vcxproj'): 
    if '{' in line: 
     my_list.append(re.match(r"(?<=\{)(.*?)(?=\})", line)) 

Я попытался изменить мое выражение, но не успех. Помогите ? Спасибо.

+0

Обратите внимание, что если синтаксис не является рекурсивным (текст, чтобы соответствовать также может происходить как подстроки), это не так, как XML. Именно этот рекурсивный характер делает регулярные выражения непригодными для синтаксического анализа XML. – outis

ответ

1

Как насчет:

re.findall(r"vcxproj.*?\{(.*?)\}", text) 
+0

Это прекрасно! – Thalia

2

re.match соответствует только в начале строки. Попробуйте re.search. В качестве альтернативы замените петлю на re.findall.

+0

Спасибо, я получаю матчи. Но они выглядят так: <_sre.SRE_Match объект в 0x023AE220> вместо фактической строки ... Я этого не ожидал? – Thalia

+1

@ user1217150: 're.search' возвращает объект' match'. Чтобы получить доступ к согласованной строке, вы должны вызвать '.group()' или '.groups()' в объекте совпадения. –

+0

@ user1217150: прочитайте [re documentation] (http://docs.python.org/library/re.html). До сих пор на все ваши вопросы ответили. Подумайте о выборе [значимого имени пользователя] (http://tinyurl.com/so-hints), чтобы получать уведомления о [@replies] (http://meta.stackexchange.com/q/43019/133817). – outis

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