【问题标题】:clarifications on the re.findall() method in pythonpython中re.findall()方法的说明
【发布时间】:2013-03-24 14:40:18
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

标签: python regex string str-replace replace


【解决方案1】:

为了分解它,[] 创建了一个character class。你会经常看到[abc] 之类的东西,它会匹配abc。相反,您也可能会看到[^abc] 将匹配任何abc。最后,您还会看到字符范围:[a-cA-C]。这引入了两个范围,它将匹配abcABC 中的任何一个。

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

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

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

【讨论】:

    【解决方案2】:

    \w 表示字母数字字符加“_”。而\s 表示空白字符,包括“\t\r\n\v\f”和空格字符“”。所以,[\w]+|[^\s\w] 表示一个只包含单词和“_”的字符串。

    【讨论】:

      猜你喜欢
      • 2020-10-31
      • 2013-11-10
      • 2011-12-24
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 2012-09-06
      • 2011-05-09
      相关资源
      最近更新 更多