Mam wyrażenie regularne, które powinno działać, aby usunąć wszystkie zawartość w pliku przed {x0}} i włącznie / po <div id="footer"

Test na żywo.

([\s\S]*)(?=<div id="content")|(?=<div id="footer)([\s\S]*)

Używam modułu RE, aby pracować z Regex w Pythonie. Kod, którego używam w moim pythonie:

file = open(file_dir)
content = file.read()
result = re.search('([\s\S]*)(?=<div id="content")|(?=<div id="footer)([\s\S]*))', content)

Próbowałem również za pomocą Re.match. Nie mogę zwrócić treści, które chcę. W tej chwili mogę tylko odzyskać wszystko przed treścią Div #

2
Brian Edelman 26 czerwiec 2017, 20:29

3 odpowiedzi

Najlepsza odpowiedź

Choć nie Wskazane , możesz wyodrębnić swoje treści zamiast po prostu dopasować go:

import re

rx = re.compile(r'''
        .*?
        (
            <div\ id="content"
            .+?
        )
        <div\ id="footer
        ''', re.VERBOSE | re.DOTALL)

content = rx.findall(your_string_here, 1)[0]
print(content)

<div id="content" class="other">
i have this other stuff 
<div>More stuff</div>

Zobacz Demo na REGEX101.com . Lepiej jeszcze: użyj parsera, np. {x0}} zamiast tego.

3
Jan 26 czerwiec 2017, 17:55

Ten regex powinien działać: https://regex101.com/r/l1zzoc/1

\<div id=\"content\"[.\s\S]*?(?=\<div id=\"footer\")

Wygląda na to, że miałeś literówka w oryginalnym kodzie, aby dopasować i zapomniał " po pierwszej {x1}}.

1
victor 26 czerwiec 2017, 17:56

Jeśli pozwolisz mi komentować: HTML + REGEX = szaleństwo. :)

HTML jest często nieregularny, a kilka bezpańskich postaci, wykoleje się z Cleverest Regex. Ponadto wiele stron internetowych, które wydają się HTML, nie jest łatwo dostępne jako HTML. Tymczasem istnieje kilka uroczych produktów do przetwarzania stron internetowych przechodzą ciągły rozwój, wśród nich pięknaSoup, selen i pisanów.

>>> from io import StringIO
>>> import bs4
>>> HTML = StringIO('''\
... <body>
...     <div id="container">
...         <div id="content">
...             <span class="something_1">some words</span>
...             <a href="https://link">big one</a>
...         </div>
...     <div>
...     <div id="footer">
... </body>''')
>>> soup = bs4.BeautifulSoup(HTML, 'lxml')
>>> soup.find('div', attrs={'id': 'container'})
<div id="container">
<div id="content">
<span class="something_1">some words</span>
<a href="https://link">big one</a>
</div>
<div>
<div id="footer">
</div></div></div>
2
Bill Bell 26 czerwiec 2017, 18:18