正则表达式的使用

  对于NLP来说,正则表达式在模版比较固定的场景发挥着至关重要的作用,下面来介绍一下正则表达式的一些基本的使用,我们用python的re模块来实现我们的功能。

1、匹配单个字符

字符 功能
. 匹配任意的一个字符(除了“\n”)
 []  匹配[]中列举的字符
 \d  匹配数字(0-9)
 \D 匹配非数字 
 \s 匹配空白(空格、tab键) 
 \S 匹配非空白字符 
 \w 匹配单词字符 
 \W 匹配非单词字符 

Example:

import re

input_str = "我叫小明,我喜欢NLP,学号是123"
# 匹配任意一个字符
test01 = re.match(".", input_str)

print(test01.group())
test02 = re.match("我.小明,我喜欢NLP", input_str)
print(test02.group())

# 匹配列举的字符
test03 = re.match("[hH]", "haha")
print(test03.group())

# 匹配开头为数字的字符串
test04 = re.match("[0-9]haha", "1haha")
print(test04.group())

# 匹配0到2 、7到9的数字的字符串
test05 = re.match("[0-27-9]haha", "8haha")
print(test05.group())

# 匹配有数字的字符串

test06 = re.match("天宫\d号", "天宫1号发射")
print(test06.group())

"""

答案如下:

我
我叫小明,我喜欢NLP
h
1haha
8haha
天宫1号


"""

2、匹配多个字符

字符 功能 表达式实例 完整匹配的字符串
* 匹配前一个字符出现0次或者无限次(可有可无) abc* abc、abcc
+ 匹配前一个字符出现1次(至少一次) abcc abcc、abccc
? 匹配前一个字符出现1次或者0次 abc* ab、abc
{m} 匹配前一个字符出现m次 ab{2}c abbc
{m,n} 匹配前一个字符出现m到n次,若省略m则从0次开始到m,若省略n,则是从m到无限次 ab{,2}c ac、abc、abbc  

Example:

test01 = re.match("[1-9]?[0-9]", "7")
test02 = re.match("[1-9]?\d", "7790")

# 匹配6位的密码
test03 = re.match("[a-zA-Z0-9_]{6}", "12345678")

print(test01.group())
print(test02.group())
print(test03.group())

"""
7
77
123456
"""

3、匹配开头和结尾

字符 功能
^
匹配字符串开头
$ 匹配字符串结尾

 

 Example:
# 匹配开头和结尾
# 以qq 邮箱地址为例子,只有第一个是符合的
email_list = ["haha@qq.com", ".ha@qq.com", "haha@qq..com", "哈哈@qq.com"]

for email_i in email_list:
    ret = re.match("[\w]{4,20}@qq\.com$", email_i)
    if ret:
        print("符合")
    else:
        print("不符合")

4、匹配分组

字符 功能
匹配左右任意一个表达式
(ab) 将括号中的字符作为一个分组
\num 引用分组num匹配到的字符串
(?P<name>) 分组起别名,匹配到的子串组在外部是通过定义name来获取的
(?P=name) 引用别名为name分组匹配到的字符串

Example:

# 匹配0-100之间的数字
test01 = re.match("[0-9]?\d|100", "9")
print(test01.group())

# 匹配出163、qq、edu的邮箱

test02 = re.match("\w{4,20}@(163|qq|edu)\.com", "1230@edu.com")
print(test02.group())

# 不是以4、7结尾的手机号码(4位)
test03 = re.match("1\d{2}[0-35-68-9]", "1001")
print(test03.group())

"""
9
1230@edu.com
1001
"""

 

posted @ 2023-11-13 13:47  TW-NLP  阅读(23)  评论(0编辑  收藏  举报