当前位置:首页 > 金融 > 【学习笔记】机器学习导论5 正则表达式与re库的简单使用

【学习笔记】机器学习导论5 正则表达式与re库的简单使用

关键词:   发布时间:2019-12-08 08:00:02

一、正则表达式 (regular expression, regex, RE)

正则表达式是用来简洁表达一组字符串的表达式, 主要用于字符串的匹配,优势:简洁(一行胜千言)

正则表达式主要有以下功能:
1通用的字符串表达框架
2简洁表达一组字符串的表达式
3判断某字符串的特征归属




二、re库的简单使用


正则表达式的表达类型:


re库的主要功能函数:

 

re.search(pattern, string, flags=0)
在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
pattern: 正则表达式的字符串或原生字符串表示
string: 待匹配字符串
flag: 正则表达式使用的控制标记

例:

import re
match = re.search(r'[1-9]\d{5}', 'ABCD  999999')  #匹配字符串中的6位数
if match:
    print(match.group(0))


999999


re.match(pattern, string, flags=0)
从一个字符串的开始位置起匹配正则表达式,返回match对象

例:

match = re.match(r'[1-9]\d{2}', '999999  ABCD')   #从字符串开始位置匹配第一个3位数
if match:
    print(match.group(0))


999

re.findall(pattern, string, flags=0)
搜索字符串,以列表类型返回全部能匹配的子串 

例:

ls = re.findall(r'[1-9]\d{5}', 'ABCD1234567  EFGH12345678')   #搜索字符串中所有的六位数
ls


['123456', '123456']


re.split(pattern, string, maxsplit=0, flags=0)
将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
maxsplit: 最大分割数,剩余部分作为最后一个元素输出

例:

ls1 = re.split(r'[1-9]\d{2}', 'ABCD123EFGH1234567')  #以三位数为标志分割字符串
print(ls1)
ls2 = re.split(r'[1-9]\d{5}', 'ABCD123456  EFGH654321', maxsplit=1)  #以六位数为标志分割字符串,只一次
print(ls2)


['ABCD', 'EFGH', '', '7']
['ABCD', '  EFGH654321']


re.finditer(pattern, string, flags=0)
搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象

例:

for m in re.finditer(r'[1-9]\d{2}', 'ABC12334567 EFG123456'):   #搜索字符串中所有的三位数,迭代输出
    if m:
        print(m.group(0))


123
345
123
456


re.sub(pattern, repl, string, count=0, flags=0)
在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
repl: 替换匹配字符串的字符串
count: 匹配的最大的次数

例:

re.sub( r'[1-9]\d{2}', 'EFG', 'ABC123456   abc1234')  #将字符串中所有的三位数用EFG代替


'ABCEFGEFG   abcEFG4'


三、re库中的match对象


例:

import re
match = re.search(r'[1-9]\d{3}', 'ABCD  999999')  #搜索字符串中的第一个4位数
if match:
    print(match.group(0))
    print(m.string)
    print(m.re)
    print(m.pos)
    print(m.endpos)
    print(m.group())


9999
ABC12334567 EFG123456
re.compile('[1-9]\\d{2}')
0
21
456

四、re库中的贪婪匹配和最小匹配 贪婪匹配: Re库默认的是贪婪匹配,即输出匹配最长的子串 例: match = re.search(r'PY.*N', 'PYANBNCNDN')
match.group()

'PYANBNCNDN'


最小匹配: Re库默认的是贪婪匹配,即输出匹配最长的子串 例: match = re.search(r'PY.*?N', 'PYANBNCNDN')
match.group()

'PYAN'



分享 2019-12-08 08:00:02

0个评论

文明上网理性发言,请遵守新闻评论服务协议