2014-04-07 80 views

回答

1

看起來這是nltk右鍵在應用正則表達式之前剝掉了字符串中的空格。

請參見the source code(或者你可以import inspectprint inspect.get_source(nltk.re_show)

def re_show(regexp, string, left="{", right="}"): 
    """docstring here -- I stripped it for brevity""" 
    print(re.compile(regexp, re.M).sub(left + r"\g<0>" + right, string.rstrip())) 

特別是看到string.rstrip(),這將去除所有尾隨空白。

例如,如果你確保你的phillip字符串不具有正確的空間:

nltk.re_show('\w+|[^\w]+', phillip + '.') 
# {#}{awesome}{ .} 

不知道爲什麼會nltk做到這一點,好像我...

錯誤
+0

謝謝!我同意,這似乎很奇怪。 – prpole

-1

\w看起來匹配[A-Za-z0-9_]。而且,由於您正在尋找一個或另一個(1+「單詞」字符或1 +非「單詞」字符),因此它將匹配第一個字符作爲\w字符並繼續前進,直到遇到不匹配

如果您進行全局匹配,您將看到包含空格的另一個匹配項(第一個非「字」字符)。

+0

從返回的結果來判斷,看起來他正在進行全局匹配(注意它如何匹配數字符號和單詞「awesome」)。他的第二個模式'\ w + | [^ \ w] +'匹配一個或多個單詞字符串,或者一個或多個否定單詞字符串,因此理論上它應該匹配''。當我在regex101中嘗試它時,該模式似乎正在工作,所以我不確定OP的問題是什麼。 – CAustin

+0

他已經在進行全局比賽,正如'#'和'awesome'分別匹配一樣。第一個字符是'#',它絕對是一個非單詞字符。 –

+0

好點,是啊,我想知道問題是什麼。 [Regex101](http://regex101.com/r/lL1lI7)它工作正常(我添加了一個捕獲組,因此更容易看到)。 – Sam