什么是网站域的正则表达式,用于标记化同时将标点符号与单词分开?
What is regex for website domain to use in tokenizing while keeping punctuation apart from words?
这是正常输出:
我想要的是将域名保留为单个标记。例如:“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))
输出:
[]
我做错了什么?有更好的域名正则表达式吗?
编辑:特殊字符必须保留为单独的标记,如上例所示,标记化必须分开('website',':')。
使用 'standard' 域正则表达式
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))
Returns: ['http://www.cartoon.com']
也适用于大约 99% 的域名
您可以使用
tokeniser=RegexpTokenizer(r'\b(?:http|ftp)s?://\S*\w|\w+|[^\w\s]+')
详情:
\b
- 前导单词边界(前面必须有一个非单词字符...)
(?:http|ftp)s?://
- 协议,http
/https
,ftp
/ftps
\S*
- 0+ 个非空白符号
\w
- 一个单词 char (=letter/digit/_
)
|
- 或
\w+
- 1 个或多个单词字符
|
- 或
[^\w\s]+
- 1 个或多个非单词字符,不包括空格。
这是正常输出:
我想要的是将域名保留为单个标记。例如:“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))
输出:
[]
我做错了什么?有更好的域名正则表达式吗?
编辑:特殊字符必须保留为单独的标记,如上例所示,标记化必须分开('website',':')。
使用 'standard' 域正则表达式
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))
Returns: ['http://www.cartoon.com']
也适用于大约 99% 的域名
您可以使用
tokeniser=RegexpTokenizer(r'\b(?:http|ftp)s?://\S*\w|\w+|[^\w\s]+')
详情:
\b
- 前导单词边界(前面必须有一个非单词字符...)(?:http|ftp)s?://
- 协议,http
/https
,ftp
/ftps
\S*
- 0+ 个非空白符号\w
- 一个单词 char (=letter/digit/_
)|
- 或\w+
- 1 个或多个单词字符|
- 或[^\w\s]+
- 1 个或多个非单词字符,不包括空格。