![Регулярное выражение: выберите HTML-класс, который не содержит слово](https://rvso.com/image/1692538/%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%BE%D0%B5%20%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%3A%20%D0%B2%D1%8B%D0%B1%D0%B5%D1%80%D0%B8%D1%82%D0%B5%20HTML-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%2C%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B9%20%D0%BD%D0%B5%20%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D1%82%20%D1%81%D0%BB%D0%BE%D0%B2%D0%BE.png)
Я хочу найти все файлы, в которых нет такого класса, который содержит слово "neculaifantaru"
У меня есть два одинаковых класса HTML:
<p class="mb-40px">I must go home, but I don't know the road.</p>
<p class="mb-40px">I love myself , because I love nature.</p>
<p class="mb-40px">Cercetare estetică, care poartă <a href="https://neculaifantanaru.com/en/qualities-of-a-leader.html" class="color-bebe" target="_new">lumina artei</a> sinestezice</p>
Вывод должен быть:
<p class="mb-40px">I must go home, but I don't know the road.</p>
<p class="mb-40px">I love myself , because I love nature.</p>
Мое регулярное выражение не очень хорошее:
(?-si:<p class="mb-40px">|(?!\A)\G)(?s-i:(?!</p>).)*?\K(?-si:?!neculaifantanaru)
В Python это просто. Но мне нужно регулярное выражение, чтобы сделать то же самое:
import os
import re
# Calea către directorul în care doriți să căutați
cale_director = 'g:/1/GATA ro'
# Parcurgeți toate fișierele din director
for nume_fisier in os.listdir(cale_director):
cale_fisier = os.path.join(cale_director, nume_fisier)
# Deschideți fiecare fișier și citiți conținutul acestuia
with open(cale_fisier, 'r') as fisier:
continut = fisier.read()
# Căutați toate tagurile <p class="mb-40px">.*?</p>
taguri_p = re.findall(r'<p class="mb-40px">(.*?)</p>', continut, re.DOTALL)
# Verificați dacă există vreun tag care conține cuvântul "neculaifantanaru"
tag_cu_neculaifantanaru = any('neculaifantanaru' in tag for tag in taguri_p)
# Verificați dacă nu există niciun tag care să conțină cuvântul "neculaifantanaru"
if not tag_cu_neculaifantanaru:
print(f'Fișierul "{nume_fisier}" nu conține niciun tag <p class="mb-40px"> care să includă cuvântul "neculaifantanaru".')
решение1
Попробуйте, это работает.
НАХОДИТЬ: (?s)\A(?!.*(neculaifantanaru).*$)
...Если нет необходимости интегрировать между <p class="mb-40px">
и</p>
решение2
- Ctrl+H
- Найти то, что:
<p class="mb-40px">(?:(?!</p>).)*neculaifantanaru.*?</p>\R?
- Заменить:
LEAVE EMPTY
- ГАЛОЧКА Обернуть вокруг
- ВЫБИРАТЬ Регулярное выражение
- ГАЛОЧКА
. matches newline
- Replace all
Объяснение:
<p class="mb-40px"> # literally
(?: # non capture group
(?! # negative lookahead, make sure we haven't </p> after
</p> # literally
) # end lookahead
. # any character
)* # end group, may appear 0 or more times
neculaifantanaru # literally
.*? # 0 or more any character, not greedy
</p> # literally
\R? # optional line break
Скриншот (до):
Скриншот (после):