python - 如何使用正则表达式或其他方法从 python 中的文本(字符串)中删除“[听不清]”?
问题描述
我们有几个文本(字符串)包含描述(不是所产生的语音的一部分),例如 [听不清] 和 [笑声]。我们想从我们的字符串中删除这些元素。它们始终具有相同的结构,并用 [...] 编写。例子:
text="I think I could pretty much say, Mike, most of them have become stars, if not all. Because you won. Winning is a wonderful thing. [Laughter] So I thought what I'd do is go around the room"
这就是我们迄今为止所尝试的:
text2=re.sub('[.*]', '', text)
或者
text2=re.sub('/[.*/]', '', text)
如果文本有两个或更多这些元素 [听不清] 等等,它会删除这些元素之间的所有文本。这不应该发生,我们不知道如何避免它。第一个示例有时会删除 . 有时它不会,这也令人困惑。我们是python初学者:)
解决方案
您正在使用重复运算符 ( *
) 的贪婪版本。因此,正则表达式将匹配最长的匹配字符串。还有一个*?
匹配最短可能字符串的非贪婪运算符。贪婪是好的,但有时不贪婪更好。根据我的个人经验,我使用非贪婪运算符比使用贪婪运算符更频繁。
尝试这个:
text2=re.sub(r'\[.*?\]', '', text)
此外,与您的版本相比,我将您的正斜杠更改为反斜杠以转义特殊字符,并且我使用原始字符串r'string'
来防止 python 反斜杠和正则表达式反斜杠之间的冲突。
AM Kuchling 有一个关于正则表达式的优秀教程。https://docs.python.org/2/howto/regex.html。那里更详细地解释了所有三个更改。
推荐阅读
- scikit-learn - 导出 4 个机器学习模型的预测时出错
- r - R:从 Tidyverse 中的 Google Places 中提取信息
- spring - Spring-Data-Jpa 与 EmbeddedId 双向关联。合并时外键为空
- reactjs - React.js 中的 CSS 模块不加载
- tensorflow - 保存权重时我的rcnn模型太大了,如何使它变小?
- chisel - 如何使用命名端口实现低电平有效复位?
- ms-access - 为什么我从访问表单中的标签中得到类型不匹配?
- java - 定义使用 API 的规则的标准方法,也许是动态 UI
- c++ - 如何在 Windows 中使用 FindNextFile 调用列出目录内容?
- crystal-reports - 在水晶报表中创建唯一的 id