在非字母字符处使用正则表达式很容易分割文本:
tokens=re.split(r'(?u)\W+',text) #to split at any non-alpha unicode character
并且This answer提供了在特定字符处拆分的方法。但是,我需要的是:
为regex提供以下例外:
我可以使用regex很容易地检测到其中任何一个,但问题是如何告诉regex将它们作为非alpha拆分的例外。在
编辑: 下面是我尝试匹配的示例文本:
^{pr2}$这是它的unicode版本(注意阿拉伯语u'\u060c',u'\u061b'中的非字母字符)
unicode_text=u'Mr. Jones email jones@gmail.com 12.455 12,254.25 says This is@a&test example_cool man+right more/fun 43.35. And so we stopped. And then we started again. \u0648\u0628\u0639\u062f\u0647\u0627 \u0631\u062c\u0639\u0646\u0627 \u0625\u0644\u0649 \u0627\u0644\u0645\u0646\u0632\u0644\u060c \u0648\u0642\u0627\u0628\u0644\u0646\u0627 \u0623\u0635\u062f\u0642\u0627\u0621\u0646\u0627\u061b \u0648\u0634\u0631\u0628\u0646\u0627 \u0627\u0644\u0634\u0627\u064a.'
以下是所提供答案中正则表达式的结果:
re.split(r'(?u)(?![\+&\/@\d+\.\d+Mr\.])\W+',unicode_text)
[u'Mr.', u'Jones', u'email', u'jones@gmail.com', u'12.455', u'12', u'254.25', u'says', u'This', u'is@a&test', u'example_cool', u'man+right', u'more/fun', u'43.35.', u'And', u'so', u'we', u'stopped.', u'And', u'then', u'we', u'started', u'again.', u'\u0648\u0628\u0639\u062f\u0647\u0627', u'\u0631\u062c\u0639\u0646\u0627', u'\u0625\u0644\u0649', u'\u0627\u0644\u0645\u0646\u0632\u0644', u'\u0648\u0642\u0627\u0628\u0644\u0646\u0627', u'\u0623\u0635\u062f\u0642\u0627\u0621\u0646\u0627', u'\u0648\u0634\u0631\u0628\u0646\u0627', u'\u0627\u0644\u0634\u0627\u064a.']
请注意,regex没有在单词结尾处拆分句号。所以能有点事情来处理这件事就好了
我认为您不想分割电子邮件地址,如
jones@gmail
和com
,因此我将异常要求由数字包围的句号改为句号后跟字母数字字符。在关键是要用消极的前瞻。我想这涵盖了你清单上所有的例子,但是如果有什么我遗漏了,请告诉我。在
小组里有没有人不会匹配。如果我理解正确,请告诉我。在
相关问题 更多 >
编程相关推荐