RegEx标记器:将文本拆分为单词、数字、标点和空格(不要删除任何内容)

2024-09-30 22:19:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我几乎在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', '.']

但这是我需要给出的清单:

^{pr2}$

正则表达式一直是我的一个弱点,所以经过几个小时的研究,我仍然被难住了。谢谢您!!在


Tags: or答案txttodayit数字this单词
3条回答

不完全符合您提供的预期输出,问题中的更多详细信息会有所帮助,但无论如何:

>>> 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']

我觉得这样的事情应该对你有用。regex中可能有比需要的更多的内容,但是您的需求有些模糊,与您提供的预期输出不完全匹配。在

>>> 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', '.']

在正则表达式\w+([.,]\w+)*|\S+\w+([.,]\w+)*捕获单词,\S+捕获其他非空白。在

为了捕获空格和制表符,请尝试以下操作:\w+([.,]\w+)*|\S+|[ \t]。在

相关问题 更多 >