2015-10-26 3 views
-1

Я пытаюсь выполнить некоторые операции над текстом с помощью регулярного выражения.Regex для удаления определенного текста при сопоставлении

текста Я работаю над ниже:

text="abcd<table class='navbox-columns-table'>The seating</tr>\n</table>fghi<table class='navbox-columns-table'>Going Down</tr>\n</table>" 

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

<table class=.+?>(.+?)</table> 

Я пытаюсь добиться этого с помощью re.sub

re.sub(r'<table class=.+?>(.+?)</table>', '1234', text) 

Я не получаю требуемый выход.

Выход мне нужно:

"abcdfghi" 

Регулярное выражение кажется правильным еще потому я получить надлежащее выходные, когда я делаю FindAll()

re.findall('<table class=.+?>(.+?)</table>', text, re.DOTALL) 

Output: ['The seating</tr>\n', 'Going Down</tr>\n'] 
+0

Ваше регулярное выражение есть ошибка в '/' должны быть экранированы '\ /' – Cyrbil

+0

@Cyrbil на самом деле? –

+0

@AvinashRaj: oups, python regex ... не нужно бежать: D thx – Cyrbil

ответ

1

Вам необходимо включить DOTALL модификатор (?s), так что это создало бы точку, присутствующую в вашем регулярном выражении, чтобы соответствовать разрыву строк.

>>> text="abcd<table class='navbox-columns-table'>The seating</tr>\n</table>fghi<table class='navbox-columns-table'>Going Down</tr>\n</table>" 
>>> re.sub(r'(?s)<table class=.+?>(.+?)</table>', '', text) 
'abcdfghi' 
+0

хочу 1234 вместо пустой строки, затем используйте 're.sub (r '(? S)

(. +?)
',' 1234 ', текст) ' –

+0

Привет, Авинаш, Спасибо за ответ. Теперь он отлично работает. Тем не менее, я даже пытался использовать re.DOTALL. Что-то вроде ...... re.sub (r '

(. +?)
', '1234', text, re.DOTALL) ....... Разный от того, что вы предложили. – Sam

+0

нет, оба одинаковые. Я написал '(? S)', потому что это проще, чем 're.DOTALL' –

-1
re.sub(r"(?s)<table[^>]*class=\'.+?\'[^>]*>.*?</table>", r"", string) 
Смежные вопросы