Nltk regexp_tokenizer没有按预期工作

时间:2014-10-31 13:28:44

标签: python regex nltk

我有一个简短的问题:

pattern = r"\w+(['-@&]\w+)*"

当我做

nltk.regexp_tokenize("lala/yaya", r"\w+(['-@&]\w+)*"  )

它给了

[u'lala/yaya']

我想我错过了什么。 \ w匹配字母数字字符,我包括', - ,@和&amp ;.怎么来" /"介于两者之间可以匹配吗?

我认为输出应该是" lala"," yaya"。

有人可以解释一下吗?非常感谢。

1 个答案:

答案 0 :(得分:2)

问题主要是因为字符类['-@&]内的连字符的位置。它匹配'@范围内的所有字符( /属于此范围)。将-放在第一个或最后一个(在角色类内),或者你甚至可以进行转义,这样连字符就不会像范围操作符一样。

[-'@&]

查看每个字符here的ascii值。

示例:

>>> re.findall(r"\w+(?:['-@&]\w+)*", 'lala/yaya')
['lala/yaya']
>>> re.findall(r"\w+(?:[-'@&]\w+)*", 'lala/yaya')
['lala', 'yaya']