当前位置: 首页 > 知识库问答 >
问题:

我正在尝试使用正则表达式获取以结尾的子字符串并删除它们以创建一个新字符串[重复]

琴镜
2023-03-14

所以我有一堆绳子从我的安基甲板上拉下来。如下所示的字符串:

我想删除所有类似“”的子字符串

彼女

并把它变成:

<代码>彼女は看護婦です。

我需要为整个句子列表执行此操作。我尝试使用以下代码:

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>が素敵にみえる。

并将其转换为:

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

抱歉,我刚开始编码,所以这对我来说还是有点困难

共有2个答案

柳飞飙
2023-03-14

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

from bs4 import BeautifulSoup

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

soup = BeautifulSoup(s, 'lxml')

print(soup.text)

输出:

Out[29]: '彼女は看護婦です。'
王棋
2023-03-14

你的误解在于你用来匹配和替换的模式<代码>r'\

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

import re

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

回复。它| Regex101

然而,对于这种类型的活动,您确实应该使用适当的HTML解析器。Regex通常被认为不是处理HTML内容的好工具。请参见Juan C对这个问题的回答,以了解如何实现这一目标的示例。

 类似资料:
  • 问题内容: 我想测试一个字符串是否以a结束。我希望下面的Java行能打印出正确的文字。为什么打印错误? 问题答案: 在Java Regex中,(在String中的任意位置找到匹配项)和(与整个String匹配)之间存在区别。 String仅具有一个方法(实现等效于以下代码:),因此您需要创建一个与完整String匹配的模式:

  • 问题内容: 我发现了非常相似的帖子,但是我在这里不能完全得到正则表达式。 我正在尝试编写一个正则表达式,该表达式返回一个位于其他两个字符串之间的字符串。例如:我想获取字符串“ cow”和“ milk”之间的字符串。 我的牛总是喂牛奶 会回来 “总是给” 到目前为止,这是我拼凑的表达方式: 但是,这将返回字符串“牛总是给”。 问题答案: 前瞻(该部分)不消耗任何输入。这是一个 零宽度的断言 (边界检

  • 虽然它的缺点是,它不匹配一个字符的字符串。

  • 问题内容: 我需要删除字符串中的一些子字符串(在大型数据集中)。该 子常常包含特殊字符,像这样的:,^,/,…和 的replaceAll()将它们视为对正则表达式的特殊字符,如点 会匹配任何字符,这是不是我真正想要的东西。 是否有其他函数可以执行“替换”而不将第一个 参数视为正则表达式? 问题答案: 只需使用String.replace()。它的功能相同,但是它 内部处理了特殊字符的转义,以避免您

  • 问题内容: 我试图编写一个正则表达式,该表达式返回括号之间的字符串。例如:我想获取位于字符串“(”和“)”之间的字符串 会回来 找到正则表达式以获取Javascript中两个字符串之间的字符串,但是我对regex并不陌生。我不知道如何在正则表达式中使用’(’,’)’ 问题答案: 您需要创建一组转义的(带有)括号(与括号匹配)和一组常规的括号来创建捕获组: 分解: :匹配左括号 :开始捕获组 :匹配

  • 我在一个多语言网站上工作,并已选择使用每种语言的自定义URL,例如: 两者都指向城市控制员的指数方法。 在每个页面上都有一个切换语言的选项,它会在我的路由中查找以匹配控制器、视图和语言。 因此,如果我在荷兰语页面上,它会找到英文版的正确网址,即“城市”而不是“steden”。 在我开始使用更复杂的正则表达式之前,一切都很好。 我有这些正则表达式,它们将匹配我所需的URL: 在我的代码中,我可以访问