澄清python中的re.findall()方法

时间:2013-04-03 04:15:13

标签: python regex string str-replace replace

我想删除一串标点符号,最后使用

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

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

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

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

我不确定我是否得到这个,澄清对我来说听起来有点模糊。任何人都可以告诉我这个上下文中的模式是什么意思以及它在findall()方法中的定义是什么?

2 个答案:

答案 0 :(得分:1)

要将其细分,[]会创建character class。您经常会看到与[abc]ab匹配的c之类的内容。相反,您也可能会看到[^abc]将匹配不是 abc的任何内容。最后,您还会看到字符范围:[a-cA-C]。这会引入两个范围,它将匹配abcABC中的任何一个。

在这种情况下,您的角色类包含特殊标记。 \w\s\w匹配任何类似字母的内容。 \w实际上取决于您的语言区域,但通常与[a-zA-Z0-9_]匹配范围a-zA-Z0-9或{{1}中的任何内容相同}}。 _类似,但它匹配任何可被视为空格的内容。

\s表示您可以重复上一场比赛1次或更多次。因此+将匹配整个字符串[a]+。在您的情况下,您将匹配彼此相邻的字母数字字符。

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

答案 1 :(得分:0)

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