我正在尝试使用正则表达式获取以 < 开头并以 > 结尾的子字符串并将它们删除以创建一个新字符串
I'm trying to take substrings that start with < and end with > using regex and remove them to make a new string
所以我从我的 anki 甲板上拉了一堆绳子。看起来像这样的字符串:
我想基本上删除所有类似于“<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>が素敵にみえる。
并将其变成:
さあ、最上級の感謝を贈るぞ
その偉大な画家の傑作が壁にさかさまにかかっているを見て、彼は驚いた。
彼はキリスト教に偏見を抱いている
人種的偏見のない人はいないという事実は否定できない。
ボクは旅の途中で近くを通りかかったところをシド王子にここまで誘導されたゴロ
生まれたての稚魚みたいにフラフラと…
滝壺まで泳いで行って一気に滝登りだ!
光っている印が神獣ヴァ・ルッタを制御する端末
芝生が素敵にみえる。
抱歉,我是编码新手,所以这些东西对我来说还是有点困难
如果您不介意使用其他库,您可以使用 BeautifulSoup
:
轻松地将 html 代码解析为字符串
from bs4 import BeautifulSoup
s = '彼女は<font color="#ff0000"><font color="#ff0000">看護婦</font></font>です。'
soup = BeautifulSoup(s, 'lxml')
print(soup.text)
输出:
Out[29]: '彼女は看護婦です。'
您的误解在于您用于匹配和替换的模式。 r'\<.+\>'
是 greedy, meaning it will match as much as it possibly can. In this sample you've provided, your pattern is taking everything (.+
) between the first <
it finds and the last >
. You can visualize that behavior in a tool like Regex101 以便更容易理解。
相反,通过将 ?
限定符添加到 .+
模式来使您的模式“惰性”:
import re
s = '彼女は<font color="#ff0000"><font color="#ff0000">看護婦</font></font>です。'
x = re.sub(r'\<.+?\>','',s)
print(x) # 彼女は看護婦です。
但是,您确实应该 为这种类型的 activity 使用合适的 HTML 解析器。 Regex is generally regarded as not being a good tool for working with HTML content. See 举个例子说明你如何能做到这一点。
所以我从我的 anki 甲板上拉了一堆绳子。看起来像这样的字符串:
我想基本上删除所有类似于“<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>が素敵にみえる。
并将其变成:
さあ、最上級の感謝を贈るぞ
その偉大な画家の傑作が壁にさかさまにかかっているを見て、彼は驚いた。
彼はキリスト教に偏見を抱いている
人種的偏見のない人はいないという事実は否定できない。
ボクは旅の途中で近くを通りかかったところをシド王子にここまで誘導されたゴロ
生まれたての稚魚みたいにフラフラと…
滝壺まで泳いで行って一気に滝登りだ!
光っている印が神獣ヴァ・ルッタを制御する端末
芝生が素敵にみえる。
抱歉,我是编码新手,所以这些东西对我来说还是有点困难
如果您不介意使用其他库,您可以使用 BeautifulSoup
:
from bs4 import BeautifulSoup
s = '彼女は<font color="#ff0000"><font color="#ff0000">看護婦</font></font>です。'
soup = BeautifulSoup(s, 'lxml')
print(soup.text)
输出:
Out[29]: '彼女は看護婦です。'
您的误解在于您用于匹配和替换的模式。 r'\<.+\>'
是 greedy, meaning it will match as much as it possibly can. In this sample you've provided, your pattern is taking everything (.+
) between the first <
it finds and the last >
. You can visualize that behavior in a tool like Regex101 以便更容易理解。
相反,通过将 ?
限定符添加到 .+
模式来使您的模式“惰性”:
import re
s = '彼女は<font color="#ff0000"><font color="#ff0000">看護婦</font></font>です。'
x = re.sub(r'\<.+?\>','',s)
print(x) # 彼女は看護婦です。
但是,您确实应该 为这种类型的 activity 使用合适的 HTML 解析器。 Regex is generally regarded as not being a good tool for working with HTML content. See