Разбор текстового файла в python - PullRequest
2 голосов
/ 06 апреля 2010

У меня есть html-файл. Я должен заменить весь текст между: [% anytext%]. Как я понимаю, это очень легко сделать с BeautifulSoup для разбора hmtl. Но что такое регулярное выражение и как удалять и записывать текстовые данные?


Хорошо, вот пример файла:

<html>
  [t1] [t2] ... [tood] ... [sadsada]
  Sample text [i8]
  [d9]
</html>

Скрипт Python должен работать со всеми строками и заменять [%] -> какую-то другую строку, например:

<html>
  * * ... * ... *
  Sample text *
  *
</html>

Что я сделал:

import re
import codecs

fullData = ''
for line in codecs.open(u'test.txt', encoding='utf-8'):
    line = re.sub("\[.*?\]", '*', line)
    fullData += line

print fullData

Этот код точно соответствует описанному в примере. Спасибо всем.

Ответы [ 2 ]

2 голосов
/ 06 апреля 2010

Regex помогает, если вам нужно заменить текст между "[%" и "%]".

Код будет выглядеть примерно так:

import re


newstring = re.sub("\[%.*?%\]",newtext,oldstring)

Регулярное выражение, используемое здесь, лениво, поэтому оно будет соответствовать всему, что встречается между «[%» и следующим «%]». Вы можете сделать это жадным, удалив знак вопроса. Это будет соответствовать всему между первым появлением «[%» и последним появлением «%]»

2 голосов
/ 06 апреля 2010

Похоже, вам нужно проанализировать общий текстовый файл, ища этот маркер для его замены - тот факт, что другой текст вне маркера является HTML, по крайней мере из-за того, как вы сформулировали свою задачу, не имеет значения.

Если это так, и вы хотите заменить каждое вхождение [%anytext%] на loremipsum, тогда просто:

thenew = theold.replace('[%anytext%]', 'loremipsum')

будет использоваться, если theold - исходная строка, содержащая текст файла - теперь thenew - это новая строка с заменой всех вхождений этого маркера - нет необходимости в регулярном выражении, BS или чем-то еще.

Если ваша задача сильно отличается от этой, просьба отредактировать ваш Вопрос, чтобы объяснить его более подробно! -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...