什么是网站域名的正则表达式用于标记化,同时保持标点符号与单词之间的区别?

时间:2016-10-13 15:15:59

标签: python regex nltk tokenize

这是正常输出: enter image description here

我想要的是将域名保持为单个令牌。例如:" https://www.twitter.com"应保留为单个令牌。

我的代码:

import nltk
from nltk.tokenize.regexp import RegexpTokenizer

line="My website: http://www.cartoon.com is not accessible."
pattern = r'^(((([A-Za-z0-9]+){1,63}\.)|(([A-Za-z0-9]+(\-)+[A-Za-z0-9]+){1,63}\.))+){1,255}$'
tokeniser=RegexpTokenizer(pattern)

print (tokeniser.tokenize(line))

输出:

[]

我做错了什么?有没有更好的域名正则表达式?

编辑:特殊字符必须保留为单独的标记,如上例所示,标记化必须分开('网站',':')。

2 个答案:

答案 0 :(得分:2)

您可以使用

tokeniser=RegexpTokenizer(r'\b(?:http|ftp)s?://\S*\w|\w+|[^\w\s]+')

请参阅regex demo

<强>详情:

  • \b - 领先的单词边界(之前必须有非单词char)。
  • (?:http|ftp)s?:// - 协议,http / httpsftp / ftps
  • \S* - 0+非空白符号
  • \w - 单词char(= letter / digit / _
  • | - 或
  • \w+ - 一个或多个单词字符
  • | - 或
  • [^\w\s]+ - 一个或多个非字列,不包括空格。

答案 1 :(得分:0)

使用&#39;标准&#39;域正则表达式

import re
line="My website: http://www.cartoon.com is not accessible."
print(re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', line))

返回:[&#39; http://www.cartoon.com&#39;]

也适用于99%的域名