我有一个简短的问题:
pattern = r"\w+(['-@&]\w+)*"
和
当我做
时nltk.regexp_tokenize("lala/yaya", r"\w+(['-@&]\w+)*" )
它给了
[u'lala/yaya']
我想我错过了什么。 \ w匹配字母数字字符,我包括', - ,@和&amp ;.怎么来" /"介于两者之间可以匹配吗?
我认为输出应该是" lala"," yaya"。
有人可以解释一下吗?非常感谢。
答案 0 :(得分:2)
问题主要是因为字符类['-@&]
内的连字符的位置。它匹配'
到@
范围内的所有字符( /
属于此范围)。将-
放在第一个或最后一个(在角色类内),或者你甚至可以进行转义,这样连字符就不会像范围操作符一样。
[-'@&]
查看每个字符here的ascii值。
示例:强>
>>> re.findall(r"\w+(?:['-@&]\w+)*", 'lala/yaya')
['lala/yaya']
>>> re.findall(r"\w+(?:[-'@&]\w+)*", 'lala/yaya')
['lala', 'yaya']