Я пытаюсь взять подстроки, которые начинаются с ‹и заканчиваются›, используя регулярное выражение, и удаляю их, чтобы создать новую строку

Итак, у меня есть связка струн, вытянутая из моей колоды анки. Строки, которые выглядят так:

введите описание изображения здесь

Я хочу удалить все подстроки, похожие на <font color> и т. Д. Возьмем такое предложение:

彼女は<font color="#ff0000"><font color="#ff0000">看護婦</font></font>です。

и превратить его в:

彼女は看護婦です。

И мне нужно сделать это для целого списка предложений. Я пробовал использовать следующий код:

import re

s = '彼女は<font color="#ff0000"><font color="#ff0000">看護婦</font></font>です。'
x = re.sub(r'\<.+\>','',s)
print(x)

и я получаю следующий результат:

彼女はです。

Когда это должно быть

彼女は看護婦です。

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

Взять небольшую часть списка - это все равно что повернуть это:

さあ、最上級の感謝を贈るぞ

その偉大な画家の<font color="#ff0000"><font color="#ff0000">傑作</font></font>が壁にさかさまにかかっているを見て、彼は驚いた。

彼はキリスト教に<font color="#ff0000"><font color="#ff0000">偏見</font></font>を抱いている

人種的偏見のない人はいないという事実は否定できない。

ボクは旅の途中で近くを通りかかったところをシド王子にここまで誘導されたゴロ

生まれたての稚魚みたいにフラフラと…<br>

滝壺まで泳いで行って一気に滝登りだ!

光っている印が神獣ヴァ・ルッタを制御する端末

<font color="#ff0000"><font color="#ff0000">芝生</font></font>が素敵にみえる。

и превратив его в:

さあ、最上級の感謝を贈るぞ
    
その偉大な画家の傑作が壁にさかさまにかかっているを見て、彼は驚いた。
    
彼はキリスト教に偏見を抱いている
    
人種的偏見のない人はいないという事実は否定できない。
    
ボクは旅の途中で近くを通りかかったところをシド王子にここまで誘導されたゴロ
    
生まれたての稚魚みたいにフラフラと…
    
滝壺まで泳いで行って一気に滝登りだ!
    
光っている印が神獣ヴァ・ルッタを制御する端末
    
芝生が素敵にみえる。

Извините, я новичок в программировании, поэтому для меня это все еще немного сложно


person Aaron Green    schedule 06.08.2020    source источник
comment
Попробуйте .+? вместо .+   -  person alani    schedule 06.08.2020
comment
Похоже на веб-скреппер. В настоящее время я пишу свой собственный веб-сайт - ›сам скребок для электронных книг. Вы можете посмотреть красивый суп 4, это xml / html библиотека синтаксического анализатора для Python, а также предназначена для обработки плохо написанного HTML (Edit: Herpa derp. Не читал Хуан К. ответ)   -  person Lightfire228    schedule 06.08.2020


Ответы (2)


Если вы не против использования другой библиотеки, вы можете легко разобрать html-код в строку с помощью BeautifulSoup:

from bs4 import BeautifulSoup

s = '彼女は<font color="#ff0000"><font color="#ff0000">看護婦</font></font>です。'

soup = BeautifulSoup(s, 'lxml')

print(soup.text)

Вывод:

Out[29]: '彼女は看護婦です。'
person Juan C    schedule 06.08.2020
comment
Я думаю, что это вполне может быть правильным ответом - HTML следует анализировать с помощью правильного парсера HTML, а не Regex. - person esqew; 06.08.2020

Ваше недоразумение заключается в шаблоне, который вы используете для сопоставления и замены. r'\<.+\>' жадный , что означает, что он будет соответствовать настолько, насколько это возможно. В этом образце, который вы предоставили, ваш шаблон берет все (.+) между первым <, которое он находит, и последним >. Вы можете визуализировать это поведение в таком инструменте, как Regex101, чтобы его было немного легче понять.

Вместо этого сделайте свой шаблон ленивым, добавив квалификатор ? к вашему .+ шаблону:

import re

s = '彼女は<font color="#ff0000"><font color="#ff0000">看護婦</font></font>です。'
x = re.sub(r'\<.+?\>','',s)
print(x) # 彼女は看護婦です。

Repl.it | Regex101

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

person esqew    schedule 06.08.2020