【NLP】_00_正则表达式

【一】基本语法

【二】基本流程

  • 指定好匹配的模式(pattern)
  • 选择相对应的方法(march,serch,…)
  • 能得到匹配的结果(group)
     
  • 基本操作示例:
  1. 工具包测试字符 准备
# 导入包
import re
# 定义字符串
arr = '自然语言处理很重要 。 12abc789'
  1. 字符集合
# [abc] 指定包含字符
pattern = re.compile(r'[abc]')
re.findall(pattern, arr)
# 输出:['a', 'b', 'c']

# [a-zA-Z] 来指定所以英文字母的大小写
pattern = re.compile(r'[a-zA-Z]')
re.findall(pattern, arr)
# 输出:['a', 'b', 'c']

# [^a-zA-Z] 指定不匹配所有英文字母
pattern = re.compile(r'[^a-zA-Z]')
re.findall(pattern, arr)
# 输出:['自', '然', '语', '言', '处', '理', '很', '重', '要', ' ', '。', ' ', '1', '2', '7', '8', '9']
  1. 或方法(将两个规则并列起来,以 | 连接,表示只要满足其中之一就可以匹配)
# [a-zA-Z]|[0-9] 表示满足数字或字母就可以匹配,这个规则等价于 [a-zA-Z0-9]
pattern = re.compile(r'[a-zA-Z]|[0-9]')
re.findall(pattern, arr)
# 输出:['1', '2', 'a', 'b', 'c', '7', '8', '9']
  1. 匹配数字 \d 等价于 [0-9]
# \d
pattern = re.compile(r'\d')
re.findall(pattern, arr)
# 输出:['1', '2', '7', '8', '9']
  1. 匹配非数字 \D
# \D 
pattern = re.compile(r'\D')
re.findall(pattern, arr)
# 输出:['自', '然', '语', '言', '处', '理', '很', '重', '要', ' ', '。', ' ', 'a', 'b', 'c']
  1. 匹配字母和数字 \w
# \w 
pattern = re.compile(r'\w')
re.findall(pattern, arr)
# 输出:['自', '然', '语', '言', '处', '理', '很', '重', '要', '1', '2', 'a', 'b', 'c', '7', '8', '9']
  1. 匹配非字母和数字 \W
# \W 
pattern = re.compile(r'\W')
re.findall(pattern, arr)
# 输出:[' ', '。', ' ']
  1. 匹配间隔符 \s
# \s
pattern = re.compile(r'\s')
re.findall(pattern, arr)
# 输出:[' ', ' ']
  1. * 0或多次匹配
# *
pattern = re.compile(r'\d*')
re.findall(pattern, arr)
# 输出:['', '', '', '', '', '', '', '', '', '', '', '', '12', '', '', '', '789', '']
  1. + 1或多次匹配
# +
pattern = re.compile(r'\d+')
re.findall(pattern, arr)
# 输出:['12', '789']
  1. ? 0或1次匹配
# ?
pattern = re.compile(r'\d?')
re.findall(pattern, arr)
# 输出:['', '', '', '', '', '', '', '', '', '', '', '', '1', '2', '', '', '', '7', '8', '9', '']
  1. 精确匹配 m 次 {m}
# {m}
pattern = re.compile(r'\d{3}')
re.findall(pattern, arr)
# 输出:['789']
  1. 匹配最少 m 次,最多 n 次 {m,n}
# {m,n}
pattern = re.compile(r'\d{1,3}')
re.findall(pattern, arr)
# 输出:['12', '789']
  • matchsearchmatch 从字符串的开头开始匹配,如果开头位置没有匹配成功,就算失败了;而 search 会跳过开头,继续向后寻找是否有匹配的字符串)
  1. 工具包测试字符 准备
# 导入包
import re
# 定义字符串
arr2 = '123自然语言处理'
  1. search
# search
pattern = re.compile(r'\d')
match = re.search(pattern, arr2)
match.group()
# 输出:'1'
  • subsubn
  • sub ( rule , replace , target [,count] )
  • subn(rule , replace , target [,count] )
  1. sub
# sub
pattern = re.compile(r'\d')
re.sub(pattern,'数字', arr2)
# 输出:'数字数字数字自然语言处理'
  1. subn(会输出替换了几次)
# subn
pattern = re.compile(r'\d')
re.subn(pattern,'', arr2)
# 输出:('自然语言处理', 3)
  • split
  • split( rule , target [,maxsplit] )
# split
arr3= '自然语言处理123机器学习456深度学习'
pattern = re.compile(r'\d+')
re.split(pattern, arr3)
# 输出:['自然语言处理', '机器学习', '深度学习']
  • ?P<…> 命名组
  • <…> 里面是你给这个组起的名字
# ?P<...>
pattern = re.compile(r'(?P<dota>\d+)(?P<lol>\D+)')
m = re.search(pattern, arr3)
m.group('lol')
# 输出:'机器学习'
发布了57 篇原创文章 · 获赞 5 · 访问量 2886

猜你喜欢

转载自blog.csdn.net/qq_34330456/article/details/100621814