Замена значений в строке для чего-то вроде <p * что-нибудь внутри нее *> на пустое значение '' или Nothing - PullRequest
0 голосов
/ 20 июня 2019

У меня есть абзац BeautifulSoup в виде строки. Я хочу заменить вхождения p (открытие) и / p (закрытие) теги в строке с помощью регулярных выражений, потому что есть экземпляры типа

    <p class="section-para">We would be happy to hear from you, Please 
    fill in the form below or mail us your requirements on<br/><span 
    class="text-red">contact@xyz.com</span></p> 

Но я не могу использовать общий

    ^< *>$

, потому что я хочу теги strong , b и h1, h1..h6 для различных целей.

Я знаю только основы RegEx, но не знаю, как их создать и использовать. Может ли кто-нибудь помочь мне сделать «включение», «исключение» (если есть). Как я могу сделать один для этой проблемы и как я могу заменить на простой ''

def formatting(string):
    this=['<h1>','</h1>','<h2>','</h2>','<h3>','</h3>','<h4>','</h4>','<h5>','</h5>','<h6>','</h6>','<b>','</b>','<strong>','</strong>']
    with_this=['\nh1 Tag:','\n','\nh2 Tag:','\n''\nh3 Tag:','\n''\nh4 Tag:','\n''\nh5 Tag:','\n''\nh6 Tag:','\n','\Bold:','\n''\nBold:','\n']

    for i in range(len(this)):
        if this[i] in string:
            string=string.replace(this[i],with_this[i])
    return(string)

Я использовал функции замены строк для тегов h1,2 ... 6 . Любая помощь будет оценена.

Ответы [ 2 ]

3 голосов
/ 20 июня 2019

Непонятно, что именно вы хотите заменить, но, возможно, поможет следующее: он позволит вам заменить теги на текст, если это то, что вам нужно. Я уверен, что вы сможете настроить его так, чтобы он делал то, что вы хотите. Также вы не указали версию BS, которую вы используете. Я использую BS4. Функция возьмет красивый объект-суп, тег для поиска, префикс I.E, на который вы хотите заменить начальный тег, и суффикс, I.E, на который вы хотите заменить конечный тег.

from bs4 import BeautifulSoup

def format_soup_tag(soup, tag, prefix, suffix):
    target_tag = soup.find(tag)
    target_tag.insert_before(prefix)
    target_tag.insert_after(suffix)
    target_tag.unwrap()

html = '<p class ="section-para">We would be happy to hear from you, <strong>Please fill in the form below</strong> or mail us your requirements on <br/><span class ="text-red" >contact@xyz.com</span></p>'
soup = BeautifulSoup(html, features="lxml")
print("###before modification###\n", soup, "\n")

format_soup_tag(soup, 'p', '\np tag: ', '\n')
print("###after p tag###\n", soup, "\n")

format_soup_tag(soup, 'strong', '\Bold: ', ' \Bold')
print("###after strong tag###\n", soup, "\n")

OUTPUT

###before modification###
 <html><body><p class="section-para">We would be happy to hear from you, <strong>Please fill in the form below</strong> or mail us your requirements on <br/><span class="text-red">contact@xyz.com</span></p></body></html> 

###after p tag###
 <html><body>
p tag: We would be happy to hear from you, <strong>Please fill in the form below</strong> or mail us your requirements on <br/><span class="text-red">contact@xyz.com</span>
</body></html> 

###after strong tag###
 <html><body>
p tag: We would be happy to hear from you, \Bold: Please fill in the form below \Bold or mail us your requirements on <br/><span class="text-red">contact@xyz.com</span>
</body></html> 
0 голосов
/ 20 июня 2019

Надеюсь, я вас правильно понял и поправьте, если я не прав.У вас есть что-то вроде:

<p class="section-para">We would be happy to hear from you, Please 
fill in the form below or mail us your requirements on<br/><span 
class="text-red">contact@xyz.com</span></p>

И вы хотите что-то вроде:

<p>We would be happy to hear from you, Please 
fill in the form below or mail us your requirements on<br/><span 
class="text-red">contact@xyz.com</span></p>

Вы можете просто сделать:

saved_content = re.search(
    '<p (.*?)>(?P<content>.*)</p>',
    your_string
).groupdict()

result = re.sub(
    r'<p (.*?)>(.*)</p>',
    f'<p>{saved_content.get("content")}</p>',
    your_string
)

Обратите внимание, что я использовалf-строки, которые доступны только в Python 3.6 или выше.Я надеюсь, что это помогло вам, и дайте мне знать, если я что-то неправильно понял или остались какие-либо вопросы.Хорошего дня!

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