python3 正则表达式检验词组搭配

来源:互联网 发布:淘宝运营管理制度 编辑:程序博客网 时间:2024/06/07 11:55
用括号来指定连接的范围, 但不想选择要输出的字符串,必须添加“ ?:”,它是许多神秘奥妙的正则表达式之一。
re.findall(r'^.*(?:ing|ly|ed|ious|ies|ive|es|s|ment)$', 'processing')
#输出['processing']
#正则表达式匹配单词
import nltk
from nltk.book import *
##使用正则表达式检测词组搭配
import re  ##使用正则表达式所需的函数库
wordlist=[w for w in nltk.corpus.words.words('en') if w.islower()]##输出nltk.corpus.words中所有english单词,如果这个英语单词是小写的话

###使用基本的元字符
##1、以$表示词尾
t=[w for w in wordlist if re.search('ed$',w)]##查找以ed结尾的词
#2、以^开始,以$结束,其中一个“.”代表一个字母
s=[w for w in wordlist if re.search('^..j..t..$',w)]##查找8个字符的词,其中第三位为j,第六位为t
#3、符号“?”表示前面的字符是可选的
sum(1 for w in wordlist if re.search('^e-?mail$',w))###查找email和e-mail出现的次数

###范围与闭包
##4、用正则表达式«^[ghi][mno][jlk][def]$»,其中每个方括号内的字符顺序不重要(如下,结果一样)
[w for w in wordlist if re.search('^[ghi][mno][jlk][def]$', w)]
[w for w in wordlist if re.search('^[hig][nom][ljk][fed]$', w)]
都输出:['gold', 'golf', 'hold', 'hole']
##所有g-o之间的字母组成的单词
[w for w in wordlist if re.search('^[ghijklmno]+$', w)]
##所有a-o之间的字母组成的单词
[w for w in wordlist if re.search('^[a-fj-o]+$', w)]
#/5、“+”表示前面项目的一个或多个实例(每个项目必须出现)
chat_words = sorted(set(w for w in nltk.corpus.nps_chat.words()))
[w for w in chat_words if re.search('^m+i+n+e+$', w)]###mine为组合,其中每个字符可以重复
##输出['miiiiiiiiiiiiinnnnnnnnnnneeeeeeeeee','miiiiiinnnnnnnnnneeeeeeee','mine','mmmmmmmmiiiiiiiiinnnnnnnnneeeeeeee']
#/6、“*”表示前面项目的零个或多个实例
[w for w in chat_words if re.search('^m*i*n*e*$', w)]
##输出['','e','i','in','m','me','meeeeeeeeeeeee','mi','miiiiiiiiiiiiinnnnnnnnnnneeeeeeeeee','miiiiiinnnnnnnnnneeeeeeee',...]
#/7、中括号[]内的^号表示除其后面的字母外所有数字、符号、字母的组合
[w for w in chat_words if re.search('^[^aeiouAEIOU]+$', w)]
##输出['36', '360','37',';','; ..', ';)',';-,'H0rny','Hmm','JRZ','K','LPN','M',……]

wsj = sorted(set(nltk.corpus.treebank.words()))
[w for w in wsj if re.search('^[0-9]+\.[0-9]+$', w)]##\号为转义符
##输出['0.0085', '0.05', '0.1', '0.16', '0.2', '0.25', '0.28','1.01', '1.1', '1.125', '1.14', '1.1650', '1.17', '1.18', '1.19', '1.2', ...]
[w for w in wsj if re.search('^[A-Z]+\$$', w)]##\号为转义符
#输出['C$', 'US$']
[w for w in wsj if re.search('^[0-9]{4}$', w)]##{4}表示前面项目重复的次数为4
###输出['1614', '1637', '1787', '1901', '1903', '1917', '1925', '1929', '1933', ...]
[w for w in wsj if re.search('^[0-9]+-[a-z]{3,5}$', w)]##{3,5}表示[a-z]项目重复的次数为至少3次,最多5次
##输出['10-day', '10-lap', '10-year', '100-share', '12-point', '12-year', ...]
[w for w in wsj if re.search('^[a-z]{5,}-[a-z]{2,3}-[a-z]{,6}$', w)]
##输出['black-and-white', 'bread-and-butter', 'father-in-law', 'machine-gun-toting',……]
[w for w in wsj if re.search('(ed|ing)$', w)]###|表示或者
##输出['62%-owned', 'Absorbed', 'According', 'Adopting', 'Advanced', 'Advancing', ...]

3.7节
###使用正则表达式为文本分词
import re
raw = """'When I'M a Duchess,' she said to herself, (not in a very hopeful tone
    though), 'I won't have any pepper in my kitchen AT ALL. Soup does very
    well without--Maybe it's always pepper that makes people hot-tempered,'..."""
###使用正则表达式为文本分词改进过程
##1、仅在空格处分词
re.split(r' ', raw) ###仅在空格处分词
print(re.split(r' ', raw),end=" ")
##2、《[ \t\n]+》表示匹配一个或多个空格、制表符(\t)或换行符(\n).
re.split(r'[ \t\n]+', raw)###[]表示匹配字符的范围,+表示前面项目1个或者多个
print(re.split(r'[ \t\n]+', raw),end=" ")
##3、 \w” 匹配词中的字符,相当于[a-zA-Z0-9_]。也定义了这个类的补“ \W” 即所有字母、数字和下划线以外的字符。我
re.split(r'\W+', raw)##所有字母、数字和下划线以外的字符处切分
print(re.split(r'\W+', raw),end=" ")

re.findall(r'\w+', raw)##\w所有[a-zA-Z0-9_]字符,+表示前面项目的一项或者多项
print(re.findall(r'\w+', raw),end=' ')
原创粉丝点击