我们有一些文本(字符串)包含描述(不属于所产生的语音),例如[听不清]和[笑声]。我们想从字符串中删除那些元素。它们始终具有相同的结构,并用[...]编写。 示例:
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初学者:)
答案 0 :(得分:2)
您正在使用重复运算符(*
)的贪婪版本。因此,正则表达式将匹配最长的匹配字符串。还有一个非贪婪的运算符*?
与最短的字符串匹配。贪婪是好的,但有时非贪婪更好。以我的个人经验,我比贪婪的运算符更频繁地使用非贪婪的运算符。
尝试一下:
text2=re.sub(r'\[.*?\]', '', text)
与您的版本相比,我将您的正斜杠更改为反斜杠以转义特殊字符,并且我使用了原始字符串r'string'
来防止python反斜杠和正则表达式反斜杠之间发生冲突。
A.M。有很好的正则表达式教程。 Kuchling。 https://docs.python.org/2/howto/regex.html。此处将对这三个更改进行更详细的说明。