Python文本处理—初识正则表达式模块(re模块)

0. 问题

1.问:如何去除英文文本中的字符、空格、数字等与文本无关的字?

如下面的字符串text,该如何处理?

text = '   Today  II[} I ??( 123 $%%L) _+O+V+20!!2[E...4Y23OU ]UU#@U  '

解决:

re.sub(r'[\W0-9_]', '', text)

Python文本处理—初识正则表达式模块(re模块)_第1张图片
2.如何去在上面要求的基础上,还保留单词之间的空格?

借此梳理总结一下python的正则表达式操作

1.概览

  • 什么是正则表达式?
    ——规则表达式

    正则表达式 = Regular Expression = regex = regexp = RE

    正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。

    正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式。 就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑

  • 正则表达式用来做什么?
    ——模糊匹配(过滤字符串)

    在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本
    许多程序设计语言都支持利用正则表达式进行字符串操作

  • 正则表达式怎么用?
    ——操纵字符串+特殊符号

2.正则表达式语法

正则表达式包括字符串(包括普通字符)和特殊字符。

  • 字符串

    绝大部分普通字符,比如 ‘A’, ‘a’, 或者 ‘0’,都是最简单的正则表达式。它们就匹配自身

  • 特殊字符

    有些字符,比如 ‘|’ 或者 ‘(’,属于特殊字符。 特殊字符既可以表示它的普通含义, 也可以影响它旁边的正则表达式的解释

特殊字符如下:
几个值得注意的点:

[ ] 表示一个字符集!
比如,想要表示0-9的数字就不需要像0-9这样表达,而是[0-9],类似的还有[A-Z].

print(re.search(r'b[a-z]d', 'I want to be a bird.') ) # 类似 bid 、ba之类的单词(没有找到)

print(re.search(r'b[a-z][a-z]d', 'I want to be a bird.') ) # 类似 bid 、ba之类的单词(找到:bird)

原始字符串( r’raw’ ):
用r当前缀,引号括起来的字符串,在它们之中的反斜杠不必做任何特殊处理

反斜杠(’ \ ')
反斜杠表示特殊形式,或者把特殊字符转义成普通字符。
包含’ \ ’的特殊序列的意义:
Python文本处理—初识正则表达式模块(re模块)_第2张图片几个常用的:

  • \s

    对于 Unicode (str) 样式:
    匹配任何Unicode空白字符(包括 [ \t\n\r\f\v] ,还有很多其他字符。
    注:\t:Tab、\n :Next

  • \S

    匹配任何非空白字符。就是 \s 取非。如果设置了 ASCII 标志,就相当于 [^ \t\n\r\f\v]

  • \w

    对于 Unicode (str) 样式:
    匹配Unicode词语的字符,包含了可以构成词语的绝大部分字符,也包括数字和下划线。如果设置了 ASCII 标志,就只匹配 [a-zA-Z0-9_]

  • \W

    匹配任何不是单词字符的字符。 这与 \w 正相反。 如果使用了 ASCII 旗标,这就等价于 [^a-zA-Z0-9_]。

  • \d
    匹配任意十进制数,相当于[a-zA-Z0-9]
    (通配符:匹配数字

  • \D
    匹配任意非十进制数,相当于[^a-zA-Z0-9]
    (通配符:匹配字母
    跳出技术细节,回过头我们想一想正则表达式到底是在做什么事情。其实,我们完全可以把对一个字符串的操作当做一个完整的数据处理流程,只不过全部的数据就是简单的字符串而已,而正则正则表达式做的事情,就是对数据的一种过滤和筛选——从原始字符串中选出我们需求的那部分数据的表达集合。

3.字符串的方法

3.1 分割字符串

  • split()
    将字符串拆分为一个列表,在正则匹配的任何地方将其拆分
    这里指的是模块方法re.split(),功能比字符串方法split()更为强大一些

3.2 搜索和替换

  • sub()
    找到正则匹配的所有子字符串,并用不同的字符串替换它们
  • subn()
    与 sub() 相同,但返回新字符串和替换次数

注意:在转向 re 模块之前,请考虑是否可以使用更快更简单的字符串方法解决问题。比如,replace()

3.2 应用匹配

match() 和 search()

你可能感兴趣的:(文本处理,机器学习之路)