首页 > 解决方案 > 如何使用正则表达式或其他方法从 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初学者:)

标签: pythonregexstring

解决方案


您正在使用重复运算符 ( *) 的贪婪版本。因此,正则表达式将匹配最长的匹配字符串。还有一个*?匹配最短可能字符串的非贪婪运算符。贪婪是好的,但有时不贪婪更好。根据我的个人经验,我使用非贪婪运算符比使用贪婪运算符更频繁。

尝试这个:

text2=re.sub(r'\[.*?\]', '', text)

此外,与您的版本相比,我将您的正斜杠更改为反斜杠以转义特殊字符,并且我使用原始字符串r'string'来防止 python 反斜杠和正则表达式反斜杠之间的冲突。

AM Kuchling 有一个关于正则表达式的优秀教程。https://docs.python.org/2/howto/regex.html。那里更详细地解释了所有三个更改。


推荐阅读