我几乎在this thread(samplebias的答案)中找到了该问题的答案;但是,我需要将一个短语拆分为单词,数字,标点符号和空格/制表符。我还需要这样做来保留所有这些事情发生的顺序(该线程中的代码已经完成)。

所以,我发现是这样的:

    from nltk.tokenize import *
    txt = "Today it's   07.May 2011. Or 2.999."
    regexp_tokenize(txt, pattern=r'\w+([.,]\w+)*|\S+')
    ['Today', 'it', "'s", '07.May', '2011', '.', 'Or', '2.999', '.']

但这是我需要产生的列表:
    ['Today', ' ', 'it', "'s", ' ', '\t', '07.May', ' ', '2011', '.', ' ', 'Or', ' ', '2.999', '.']

正则表达式一直是我的弱点之一,因此经过几个小时的研究,我仍然感到困惑。谢谢!!

最佳答案

我认为类似这样的东西应该对您有用。该正则表达式可能比需要的更多,但是您的要求有些含糊,并且与您提供的预期输出不完全匹配。

>>> txt = "Today it's \t07.May 2011. Or 2.999."
>>> p = re.compile(r"\d+|[-'a-z]+|[ ]+|\s+|[.,]+|\S+", re.I)
>>> slice_starts = [m.start() for m in p.finditer(txt)] + [None]
>>> [txt[s:e] for s, e in zip(slice_starts, slice_starts[1:])]
['Today', ' ', "it's", ' ', '\t', '07', '.', 'May', ' ', '2011', '.', ' ', 'Or', ' ', '2', '.', '999', '.']

关于python - RegEx Tokenizer : split text into words,数字,标点和空格(请勿删除任何内容),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6987356/

10-12 15:14