是什么?
正则表达式是一种定义了搜索模式的特征序列,主要用于字符串的模式匹配,或是字符的匹配。正则表达式是处理NLP的最基本手段之一,其可以帮助我们在格式复杂的的文本中抽取所需要的信息。
用来做什么?
- NLP通常所需要处理的预料一部分来自web网页的信息抽取,一部分来自文本格式的文档,但是它们的格式不统一,大部分为半结构化文本,因此需要处理它们,将其转变为结构化文本以便后续处理。
- 正则表达式的另一个作用是去除噪声。在处理大量文本片段的时候,有非常多的文字信息与最终输出的文本无关,这些无关片段称之为噪声(如URL或链接、语气助词、标点符号等)。
实现方法
在Python中,我们用re模块来实现正则表达式。通过使用re的一个方法--re.search。
通过使用re.search(regex,string)这个方法,我们可以检测到string这个字符串是否匹配正则表达式regex。如果匹配到会返回一个match对象,如果没有匹配到则返回None。
- 例一
import re
text_string = '''正则表达式是一种定义了搜索模式的特征序列,主要用于字符串的模式匹配,或是字符的匹配,正则表达式是处理NLP的最基本手段之一,其可以帮助我们在格式复杂的的文本中抽取所需要的信息,'''
regex = '正则'
p_string = text_string.split(',') #以逗号为分隔符划分原句
for line in p_string:
if re.search(regex,line) is not None: #查找是否匹配
print(line) #如果匹配到,打印这行信息
结果:
正则表达式是一种定义了搜索模式的特征序列 正则表达式是处理NLP的最基本手段之一
- 例二 匹配任意一个字符
符号 | 含义 |
. | 匹配任意一个字符 |
如
正则表达式 | 可以匹配 | 不能匹配 |
a.c | abc | abdc |
..t | bat | it |
import re
text_string = '''正则表达式是一种定义了搜索模式的特征序列,主要用于字符串的模式匹配,或是字符的匹配,正则表达式是处理NLP的最基本手段之一,其可以帮助我们在格式复杂的的文本中抽取所需要的信息,'''
regex = '正.'
p_string = text_string.split(',') #以逗号为分隔符划分原句
for line in p_string:
if re.search(regex,line) is not None: #查找是否匹配
print(line) #如果匹配到,打印这行信息
结果
正则表达式是一种定义了搜索模式的特征序列 正则表达式是处理NLP的最基本手段之一
- 例三 匹配起始和结尾字符串
符号 | 含义 | |
^ | 匹配开始的字符串 | ''^a'' 代表的是匹配所有以a开头的字符串 |
$ | 匹配结尾的字符串 | ''a$'' 代表的是匹配所有以a结尾的字符串 |
import re
text_string = '''正则表达式是一种定义了搜索模式的特征序列,主要用于字符串的模式匹配,或是字符的匹配,正则表达式是处理NLP的最基本手段之一,其可以帮助我们在格式复杂的的文本中抽取所需要的信息,'''
regex = '^正'
p_string = text_string.split(',') #以逗号为分隔符划分原句
for line in p_string:
if re.search(regex,line) is not None: #查找是否匹配
print(line) #如果匹配到,打印这行信息
结果
正则表达式是一种定义了搜索模式的特征序列 正则表达式是处理NLP的最基本手段之一
- 例四 使用中括号匹配多个字符
符号 | 含义 | 例子 |
[ ] | 匹配多个字符 | ''[bcr]at'' 代表匹配 ''bat'' ''cat'' ''rat'' |
[string1-string2] | 匹配从string1到string2的所有字符 | ''[a-z]'' 代表从a-z的所有字符 ''[1-9]''代表从1-9的所有字符 |
- 例五 转义符问题
正则表达式也使用的是“\”作为转义符,所以会有困扰
符号 | 含义 |
''\\\\'' | 前两个和后两个斜杠分别在编程语言中转义为一个反斜杠,然后这两个反斜杠再在正则表达式中转义为一个反斜杠。 |
解决方法
符号 | 含义 |
r''\\'' | 同上 |
- 另外,,,re.finddall(''[a-z]'',''abc1234'')得到的结果是[''a'',''b'',''c'']