2016-10-06 2 views
2

Для следующей строки:Заменить специальные символы словами в python

s = The \r\n sun shines, that's fine [latex]not\r\nt for \r\n everyone[/latex] and if it rains, \r\nit Will Be better..

Если я хочу, чтобы заменить \n\r на ' ' между [latex] и [/latex], я могу использовать:

re.sub("\[latex\][^]]*\[/latex\]", lambda x:x.group(0).replace('\r\n',' '), s) 

, который работает отлично.

Однако, если вход:

s = some\r\nthing\r\n[latex]\\[\x08egin{array}{*{20}{l}}\r\n{{\rm{dA}} = {\rm{wdy}}:}\\\r\n{{\rm{dF}} = {\rm{P}}\\;{\rm{dA}} = \rho {\rm{g}}\\left({{\rm{H}}-{\rm{y}}} \right)\\;\\omega \\;{\rm{dy}}}\r\n\\end{array}\\][/latex]\r\n 

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

+1

Это потому, что ваше регулярное выражение не совпадает ни во втором случае. –

+0

Используйте ['r" (? S) \ [latex]. *? \ [/ Latex] "'] (https://ideone.com/heODCc). Также обратите внимание, что ваши строки также содержат один '\ r' - вы также можете его заменить. –

+0

Вводимая строка содержит строки или буквенные '\ r \ n' s? –

ответ

1

Проблема связана с наличием ] до [/latex] во втором вводе. Также лучше использовать необработанные строки для ввода и регулярного выражения.

Вы можете использовать регулярные выражения для поиска:

\[latex\].*?\[/latex\] 

RegEx Demo

Код:

>>> s = r"some\r\nthing\r\n[latex]\\[\x08egin{array}{*{20}{l}}\r\n{{\rm{dA}} = {\rm{wdy}}:}\\\r\n{{\rm{dF}} = {\rm{P}}\\;{\rm{dA}} = \rho {\rm{g}}\\left({{\rm{H}}-{\rm{y}}} \right)\\;\\omega \\;{\rm{dy}}}\r\n\\end{array}\\][/latex]\r\n" 
>>> print re.sub(r"\[latex\].*?\[/latex\]", lambda x:x.group(0).replace(r'\r\n', ' '), s) 
some\r\nthing\r\n[latex]\\[\x08egin{array}{*{20}{l}} {{\rm{dA}} = {\rm{wdy}}:}\\ {{\rm{dF}} = {\rm{P}}\\;{\rm{dA}} = \rho {\rm{g}}\\left({{\rm{H}}-{\rm{y}}} \right)\\;\\omega \\;{\rm{dy}}} \\end{array}\\][/latex]\r\n 

Code Demo

+1

Проверить код и сгенерированный вывод в ответ. Он заменяет '\ r \ n' на' '' 'на выходе. – anubhava

+0

Я пропустил 'r' на входе. благодаря ! –

+0

Я также добавил демонстрацию рабочего кода в ответ. – anubhava