我试图使用正则表达式获取以<开头、以>结尾的子字符串,并将它们删除以生成新字符串

2024-05-15 18:45:27 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我从我的anki甲板上拉了一串绳子。如下所示的字符串:

enter image description here

我想删除所有类似于“<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>が素敵にみえる。

并将其转化为:

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

对不起,我对编码还不熟悉,所以这东西对我来说还是有点难


Tags: 字符串代码importre句子colorprintfont
2条回答

你的误解在于你用来匹配和替换的模式r'\<.+\>'greedy, meaning it will match as much as it possibly can。在您提供的这个示例中,您的模式将获取它找到的第一个<和最后一个>之间的所有(.+)。您可以在Regex101之类的工具中可视化该行为,使其更易于理解

相反,通过将?限定符添加到.+模式中,使您的模式“懒惰”:

import re

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

Repl.it{a4}

但是,您确实应该为这种类型的活动使用适当的HTML解析器Regex is generally regarded as not being a good tool for working with HTML content.请参见Juan C's answer to this question了解如何实现这一目标的示例

如果您不介意使用另一个库,您可以使用BeautifulSoup轻松地将html代码解析为字符串:

from bs4 import BeautifulSoup

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

soup = BeautifulSoup(s, 'lxml')

print(soup.text)

输出:

Out[29]: '彼女は看護婦です。'

相关问题 更多 >