0

我想去掉一串标点符号,最后我使用了

re.findall(r"[\w]+|[^\s\w]", text)

它工作正常,它确实解决了我的问题。我不明白的是括号内的细节和整个模式的东西。r"[\w]+|[^\s\w]"真正的意思是什么?我在 Python 标准库中查找了它,它说:

re.findall(pattern, string, flags=0)

返回字符串中模式的所有非重叠匹配,作为字符串列表。从左到右扫描字符串,并按找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。空匹配包含在结果中,除非它们触及另一个匹配的开始。

我不确定我是否明白这一点,而且澄清对我来说有点含糊。谁能告诉我这种情况下的模式是什么意思以及它在 findall() 方法中是如何定义的?

4

2 回答 2

1

为了分解它,[]创建一个字符类。您经常会看到类似which [abc]will matcha或. 相反,您也可能会看到will 匹配任何不是,或. 最后,您还会看到字符范围: . 这引入了两个范围,它将匹配, , , , ,中的任何一个。 bc[^abc] abc[a-cA-C]abcABC

在这种情况下,您的角色类包含特殊标记。 \w\s\w匹配任何类似字母的东西。 实际上取决于您的语言环境,但它通常与匹配范围、或.中的任何内容\w相同。 是相似的,但它匹配任何可以被认为是空白的东西。[a-zA-Z0-9_]a-zA-Z0-9_\s

+意味着您可以重复上一场比赛 1 次或多次。所以[a]+将匹配整个字符串aaaaaaaaaaa。在您的情况下,您正在匹配彼此相邻的字母数字字符。

|基本上就像“或” 。匹配左边的东西,如果左边的东西不匹配,则匹配右边的东西

于 2013-04-03T04:29:45.740 回答
0

\w表示字母数字字符加“_”。并且\s表示空白字符,包括“\t\r\n\v\f”和空格字符“”。因此,[\w]+|[^\s\w]表示仅包含单词和“_”的字符串。

于 2013-04-03T04:29:53.823 回答