我想删除一串标点符号,最后使用
re.findall(r"[\w]+|[^\s\w]", text)
它工作正常,它确实解决了我的问题。我不明白的是括号内的细节和整个模式的东西。 r"[\w]+|[^\s\w]"
到底意味着什么?我在Python标准库中查找了它,它说:
re.findall(pattern, string, flags=0)
返回字符串中所有非重叠的模式匹配,作为列表 字符串。从左到右扫描字符串,并返回匹配项 按顺序找到。如果模式中存在一个或多个组, 返回一个组列表;如果模式,这将是一个元组列表 有不止一个团体。结果中包含空匹配 除非他们触及另一场比赛的开始。
我不确定我是否得到这个,澄清对我来说听起来有点模糊。任何人都可以告诉我这个上下文中的模式是什么意思以及它在findall()方法中的定义是什么?
答案 0 :(得分:1)
要将其细分,[]
会创建character class。您经常会看到与[abc]
,a
或b
匹配的c
之类的内容。相反,您也可能会看到[^abc]
将匹配不是 a
,b
或c
的任何内容。最后,您还会看到字符范围:[a-cA-C]
。这会引入两个范围,它将匹配a
,b
,c
,A
,B
,C
中的任何一个。
在这种情况下,您的角色类包含特殊标记。 \w
和\s
。 \w
匹配任何类似字母的内容。 \w
实际上取决于您的语言区域,但通常与[a-zA-Z0-9_]
匹配范围a-z
,A-Z
,0-9
或{{1}中的任何内容相同}}。 _
类似,但它匹配任何可被视为空格的内容。
\s
表示您可以重复上一场比赛1次或更多次。因此+
将匹配整个字符串[a]+
。在您的情况下,您将匹配彼此相邻的字母数字字符。
aaaaaaaaaaa
基本上就像“或”。匹配左边的东西,如果左边的东西不匹配,或匹配右边的东西。
答案 1 :(得分:0)
\w
表示字母数字字符加“_”。 \s
表示空格字符,包括“\ t \ r \ n \ n \ v \ f”和空格字符“”。因此,[\w]+|[^\s\w]
表示仅包含单词和“_”的字符串。