欢迎光临
我们一直在努力

python新手学习——正则表达式

正则表达式是一种表达式语句,用于对字符串类型数据进行操作,包含从字符串中筛选出满足表达式条件的信息,将字符串中的内容进行替换等功能。在python中通过re库实现。

一、匹配字符串

1.1 match()函数

使用形式:

match(参数1,参数2)

功能:表示从参数2(字符串类型数据)中查找满足参数1(正则表达式)的内容,如果参数2起始位置匹配不成功的话,就返回none,如果起始位置匹配成功,就返回匹配的内容。

import re

message = '张三、李四、王五、赵六'
result = re.match('张三',message) #只能从字符串开头开始匹配,并且要求匹配内容与开头完全对齐
print(result)

import re

message = '张三、李四、王五、赵六'
result = re.match('张三、李四',message)
print(result)

1.2 search()函数

使用形式:

search(参数1,参数2)

功能:

表示从参数2(字符串类型数据)中查找满足参数1(正则表达式)的内容,如果匹配了多个参数1,则只返回第一个匹配成功的信息。

import re

message = '张三、李四、王五、赵六'
result = re.search('王五',message)
print(result)

1.2 findall()函数

使用形式:

findall(参数1,参数2)

功能:表示从参数2(字符串类型数据)中查找满足参数1(正则表达式)的内容,如果匹配了多个参数1,则返回匹配成功的全部信息(列表形式)

import re

message = '张三、李四、王五、赵六、王五'
result = re.findall('王五',message)
print(result)

二、正则表达式

2.1 表示字符范围

[xyz] :字符集合,匹配所包含的任意一个字符。如[abc]匹配字符a或者b或者c。

[a-z] :字符范围,匹配指定范围内的任意字符(区分大小写)。如[a-z]匹配a到z范围内的任意小写字母,[0-9]匹配从0到9的任意数字。

import re

message = 'Python93,C87,Java63,C++88'
result_1 = re.search('[cn]',message)
result_2 = re.findall('[0-9]',message)
result_3 = re.findall('[cn]*[0-9]',message)
print(result_1,result_2,result_3)

2.2 表示字符出现的次数

*:匹配前面的子表达式任意次(大于等于0次)。如zo*能匹配''z''、'zo''、''zoo'',等价于{0,}

+:匹配前面的子表达式一次或多次。如''zo+''可以匹配''zo''和''zoo'',但不能匹配''z'',等价于{1,}。

?:匹配前面的子表达式0次或者一次,如do(es)?可以匹配''do''或者''does'',?等价于{0,1}。

^:匹配输入行首。

$:匹配输入行尾。

{n}:匹配n次,n为非负整数。如o{2}可以匹配''food''中的oo,不能匹配''Bob''中的o。

{n,}至少匹配n次,n为非负整数,如o{2}可以匹配''foooood'中的oooooo',不能匹配''Bob''中的o,o{1,}等价于o+,o{0,}等价于o*

{n,m}:最少匹配n次且最多匹配m次,m和n均为非负整数且n<m,如o{1,3}可以匹配‘’fooooood‘中的前三个'ooo'和后三个'ooo'。o{0,1}等价于o?,注意:逗号和两个数之间不能有空格。

import re

message = 'da2a7ddbre77yifed777t3fefd7777b'
result = re.findall('[a-z]*[0-9][a-z]',message)
print(result)

2.3 表示同一类字符

\\d :匹配一个数字类字符,等价于[0-9]

\\D :匹配一个非数字类字符,等价于[^0-9],^在方括号中表示非,即不匹配输入字符中的首位字符

\\s :匹配任何不可见字符,包括空格、制表符、分页符等,等价于[\\f\\n\\r\\t\\v]

\\S :匹配任何可见字符,等价于[^\\f\\n\\r\\t\\v]

\\w :匹配包括下划线的任何单词字符,等价于[A-Za-z0-9_]

\\W :匹配任何不包括下划线的非单词字符,等价于[^A-Za-z0-9_]

正则表达式中所谓的“单词”,就是由“\\w”所定义的字符所组成的子串。

边界:边界是指一个位置,而不是某一个具体的字符

单词的边界:表示所在位置的一侧为单词字符,另一侧为非单词字符、字符串的开始或结束位置(匹配一个边界,一边字符是\\w,一边字符不是\\w)

非单词的边界:匹配除 \\b 之外的边界。两边字符都是\\w,或两边字符都不是\\w

\\b :匹配一个单词的边界

\\B :匹配一个非单词的边界

\\f :匹配一个分页符

\\n :匹配一个换行符

\\r :匹配一个回车符

\\t :匹配一个制表符

\\v :匹配一个垂直制表符

.   :匹配除''\\n''和''\\r''之外的任何单个字符。

import re
use_name = input("请输入您的用户名:")
result = re.findall(r'^[A-Za-z_]\\w{7,}$', use_name)
print(result)

message = 'verb very never every'
result = re.findall(r'\\w+er\\B', message) # \\b是转义字符
print(result)

三、贪婪和非贪婪模式

贪婪模式:默认匹配模式都是贪婪模式,匹配形式是尝试匹配尽可能多的字符,只要满足正则表达式的要求就会匹配最多的字符。

import re
message = 'ccc739134792hd'
result = re.findall(r'ccc\\d+', message)
print(result)

非贪婪模式:匹配形式是尝试匹配尽可能少的字符,一旦满足正则表达式的要求就不再匹配,在次数限制操作符后加上"?"就可以将匹配模式转换为非贪婪模式。

import re
message = 'ccc739134792hd'
result = re.findall(r'ccc\\d+?', message)
print(result)

四、或和组

或:用'|'表示,表示将两个匹配条件进行逻辑“或”(or)运算

import re

message = 'verb very never every'
result = re.findall(r'\\w+ev|\\w+ry', message)
print(result)

组:用“(表达式)”表示,表示将()中的表达式定义为组,并且将匹配这个表达式的字符保存到一个临时区域(一个是正则表达式最多可以保存9个组)。

import re

message = 'verb very never every'
result = re.findall(r"e(.+)(.)r", message)
print(result)

五、sub()和compile()方法

sub()方法

使用形式:

sub(参数1,参数2,参数3)

功能:将字符串参数3中所有与参数1匹配的字符替换为参数2.

import re

content = 'dh932hf9f934hfnf39d'
content = re.sub( '\\d', '0',content)
print(content)

compile()方法

使用形式:

re.compile(pattern, flags=0)

pattern(必选参数):

作用:定义你要匹配的正则表达式规则,是字符串类型。

flags(可选参数,默认值 = 0):

作用:设置正则匹配的 “修饰符”,改变匹配的行为(比如忽略大小写、多行模式等)。

import re

contentl = '2020 12 15 12:00'
pattern = re.compile('\\d{2}:\\d{2}')
print(pattern.findall(contentl))

赞(0)
未经允许不得转载:171主机测评 » python新手学习——正则表达式
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址