Удалить текст, кроме содержимого тега - PullRequest
1 голос
/ 13 июня 2010

Противоположность может быть достигнута с помощью pyparsing следующим образом:

from pyparsing import Suppress, replaceWith, makeHTMLTags, SkipTo
#...
removeText = replaceWith("")
scriptOpen, scriptClose = makeHTMLTags("script")
scriptBody = scriptOpen + SkipTo(scriptClose) + scriptClose
scriptBody.setParseAction(removeText)
data = (scriptBody).transformString(data)

Как мне сохранить содержимое тега "table"?

ОБНОВЛЕНИЕ 0:

Я пытался: # хранить только таблицы tableOpen, tableClose = makeHTMLTags ("таблица") tableBody = tableOpen + SkipTo (tableClose) + tableClose f = replaceWith (tableBody) tableBody.setParseAction (е) data = (tableBody) .transformString (data) данные печати

и я получаю что-то вроде этого ...

garbages
<input type="hidden" name="cassstx"   value="en_US:frontend"></form></td></tr></table></span></td></tr></table> 

{<"table"> SkipTo:(</"table">) </"table">} 
<div id="asbnav" style="padding-bottom: 10px;">{<"table"> SkipTo:(</"table">) </"table">} 
</div> 
even more garbages

ОБНОВЛЕНИЕ 2:

Спасибо, Мартелли. Что мне нужно это:

from pyparsing import Suppress, replaceWith, makeHTMLTags, SkipTo
#...
data = 'before<script>ciao<table>buh</table>bye</script>after'

tableOpen, tableClose = makeHTMLTags("table")
tableBody = tableOpen + SkipTo(tableClose) + tableClose
thetable = (tableBody).searchString(data)[0][2]

print thetable

1 Ответ

1 голос
/ 13 июня 2010

Вы можете сначала извлечь таблицу (аналогично тому, как вы сейчас извлекаете скрипт, но без удаления, конечно ;-), получив строку thetable; затем вы извлекаете сценарий replaceWith(thetable) вместо replaceWith(''). В качестве альтернативы, вы можете подготовить более сложное действие синтаксического анализа, но простой двухэтапный подход кажется мне более простым. Например. (чтобы сохранить содержимое table, а не table теги ):

from pyparsing import Suppress, replaceWith, makeHTMLTags, SkipTo
#...
data = 'before<script>ciao<table>buh</table>bye</script>after'

tableOpen, tableClose = makeHTMLTags("table")
tableBody = tableOpen + SkipTo(tableClose) + tableClose
thetable = (tableBody).searchString(data)[0][2]

removeText = replaceWith(thetable)
scriptOpen, scriptClose = makeHTMLTags("script")
scriptBody = scriptOpen + SkipTo(scriptClose) + scriptClose
scriptBody.setParseAction(removeText)
data = (scriptBody).transformString(data)

print data

Это печатает beforebuhafter (то, что находится за пределами тега скрипта, с содержимым тега таблицы, помещенным внутри), мы надеемся, что «по желанию».

...