удаляйте разрывы строк и пробелы вокруг элементов span с помощью регулярного выражения Python - PullRequest
0 голосов
/ 03 мая 2019

После использования prettify BeautifulSoup я хочу удалить разрывы строк и отступы от span и, возможно, других встроенных тегов.

Например, у меня сейчас есть что-то вроде этого:

>>> import bs4
>>> html = "<div><p>I don't want this <span>span element</span> on it's one line.</p></div>"
>>> soup = bs4.BeautifulSoup(html, "html.parser")
>>> soup.prettify()
"<div>\n <p>\n  I don't want this\n  <span>\n   span element\n  </span>\n  on its one line.\n </p>\n</div>"
>>> print(soup.prettify())
<div>
 <p>
  I don't want this
  <span>
   span element
  </span>
  on it's one line.
 </p>
</div>

Какое регулярное выражение я могу использовать, чтобы удалить пробелы и новые строки вокруг тегов span, чтобы я получил следующее:

<div>
 <p>
  I don't want this <span>span element</span> on its one line.
 </p>
</div>

1 Ответ

0 голосов
/ 03 мая 2019

проверьте это:

import re

html = '''
    <div>
        <p>
            I don't want this
            <span>
                span element
            </span>
            on it's one line.
        </p>
    </div>
'''

soup = bs4.BeautifulSoup(html)

## getting prettified output 
html = soup.prettify()


# removing \n and space before and after <span> tag
html = re.sub('[ \n]+<span>[ \n]+','<span>', html)

# removing \n and space before and after </span> tag
html = re.sub('[ \n]+</span>[ \n]+','</span>', html)

выполнение print(html) дает следующий вывод:

<div>
   <p>
       I don't want this<span>span element</span>on it's one line.
   </p>
</div>

вы можете создать функцию, которая делает это для различных тегов:

import re

def prettify_output(html, tag):
    html = re.sub(f'[ \n]+<{tag}>[ \n]+',f'<{tag}>', html)
    html = re.sub(f'[ \n]+</{tag}>[ \n]+',f'</{tag}>', html)
    return html

## call 
html = prettify_output(html, 'span')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...