nltk之使用正则表达式检测词组搭配

注:本文中用箭头表示正则表达式 如:《patt》

在Python中使用正则表达式,需要使用 import re 导入 re函数库

·使用基本的元字符

使用正则表达式《ed$》查找以ed结尾的词汇。使用函数 re.search(p,s) 检查字符串s做是否有模式p。

import re
wordlist=[w for w in nltk.corpus.words.words('en') if w.islower()]
print([w for w in wordlist if re.search('ed$',w)])

通配符 “.” 可以用来匹配任何单个字符。假设有一个8个字母组成的字谜,j是第三个字母,t是第六个字母

[w for w in wordlist if re.search('^..j..t..$',w)]
插入符号”^“表示匹配字符串的开始,“$”表示匹配字符串的结束。

符号‘?’表示前面的字符是可选的。因此《^e-?mail$》将匹配email和e-mail。我们可以使用sum()

·范围与闭包

先看正则表达式:《^[ghi][mno][jlk][def]$》表示 产生由 ghi mno jlk def 排列组合产生的单词,即可以由T9系统 4653所能得到的序列 #[]中字母顺序对结果不产生影响

此正则表达式可以转化为:《^[ghijklmno]+$》《^[g-o]+$》

+号表示 前面项目的一个或多个实例

*号表示 前面的项目的零个或多个实例

“+”和“*”被称为kleene闭包 或者闭包


元字符总结:

. 通配符,匹配所有字符

^abc 匹配以abc开始的字符串

abc$ 匹配以abc结尾的字符串

[abc] 匹配字符集合

[A-Z0-9] 匹配字符范围

ed|ing|s 匹配指定的字符串(析取)

* 前面的项目零个或多个,如a*,[a-z]*

+ 前面的项目1个或多个,如a+,[a-z]+

{n} 重复n次,n为非负整数

{n,} 至少重复n次

{,n} 重复不多于n次

{m,n} 至少重复m次不多于n次

a(b|c)+ 括号表示操作符的范围

你可能感兴趣的:(Python自然语言处理)