2016-06-19 2 views
-1

У меня есть следующая строка, что мне нужно разобрать и получить значения чего-либо внутри определенных \$ теговRegex матча все между специальным тэгом

, например, строка

The following math equation: \$f(x) = x^2\$ is the same as \$g(x) = x^(4/2) \$ 

Я хочу, чтобы разобрать все, что находится между тегами \$, так что результат будет содержать оба уравнения

'f(x) = x^2' 
'g(x) = x^(4/2) ' 

Я пытался что-то вроде re.compile(r'\\\$(.)*\\$'), но он не работал.

ответ

1

Вы почти получили его, просто не хватает обратной косой черты и вопросительный знак (так он останавливается, как только он находит вторую \$ и не совпадает с самой длинной строки возможно): r'\\\$(.*?)\\\$'

>>> pattern = r'\\\$(.*?)\\\$' 
>>> data = "The following math equation: \$f(x) = x^2\$ is the same as \$g(x) = x^(4/2) \$" 
>>> re.findall(pattern, data) 
['f(x) = x^2', 'g(x) = x^(4/2) '] 
+0

Отлично! Спасибо. Может ли быть изменено так, что escape-файлы '\ $' не совпадают? Как '\\ $' – Algorithmatic

+0

Что значит? Это не выход. – Anonymous

+0

Если данные '\\ $ f (x) = 1 \ $', то они не должны совпадать, потому что в начале есть двойная косая черта – Algorithmatic

0

это работает :

import re 
regex = r'\\\$(.*)\\\$' 
r = re.compile(regex) 
print r.match("\$f(x) = x^2\$").group(1) 
print r.match("\$g(x) = x^(4/2) \$").group(1) 
+0

Это действительно не работает с данным примером, хотя '. *' Тоже жадный и получает оба уравнения и остальную часть текста между ними. –

1

Это регулярное выражение может соответствовать:

/\\\$.{0,}\\\$/g 

/ - начать
\\\$ - спасся: \ $
. - любой символ между
{0,} - по крайней мере, 0 символов (любое количество символов, на самом деле)
\\\$ - спасся: \ $
/ - конец
g - глобальный поиск

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