我几乎在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', '.']
正则表达式一直是我的弱点之一,所以经过几个小时的研究后,我仍然难过。谢谢!!
答案 0 :(得分:4)
我认为这样的事情对你有用。这个正则表达式可能比需要的更多,但是你的要求有些模糊,并且与你提供的预期输出完全不符。
>>> 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', '.']
答案 1 :(得分:0)
在正则表达式\w+([.,]\w+)*|\S+
中,\w+([.,]\w+)*
捕获字词,\S+
捕获其他非空格。
为了捕获空格和制表符,请尝试以下操作:\w+([.,]\w+)*|\S+|[ \t]
。
答案 2 :(得分:0)
不完全符合您提供的预期输出,问题中的一些更多细节会有所帮助,但无论如何:
>>> txt = "Today it's 07.May 2011. Or 2.999."
>>> regexp_tokenize(txt, pattern=r"\w+([.',]\w+)*|[ \t]+")
['Today', ' ', "it's", ' \t', '07.May', ' ', '2011', ' ', 'Or', ' ', '2.999']