美文网首页
4.正则表达式

4.正则表达式

作者: M_小七 | 来源:发表于2020-07-16 10:40 被阅读0次

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

  • 原子
    原子是正则表达式的最基本的组成单位,而且在每个模式中最少包含一个原子。原子是由所有那些未显示指定为元字符的打印和非打印字符组成。

1.普通字符作为原子
普通字符是编写正则表达式时最常见的原子了,包括所有的大写和小写字母字符、所有数字等。例如,a——z、A——Z、0——9。

import re
pattern = 'pp'
String = "pptoroyd"
#re.search()函数对整个字符串搜索,并返回第一个匹配字符串的match对象
Result = re.search(pattern,String)

print(f"普通字符作为原子的结果:{Result}")
# 普通字符作为原子的结果:<re.Match object; span=(0, 2), match='pp'>

2.一些特殊字符和元字符作为原子
任何一个符号都可以作为原子使用,但如果这个符号在正则表达式中有一些特殊意义,我们就必须使用转义字符“\”取消它的特殊意义,将其变成一个普通的原子。例如,所有标点符号以及一些其他符号,双引号''''、单引号''、“*”、“+”、“.”等,如果当原子就必须像\”、\’、+和.这样使用。

import re
#需要转义
pattern = '\+'
String = "a+b=c"
#re.search()函数对整个字符串搜索,并返回第一个匹配字符串的match对象
Result = re.search(pattern,String)

print(f"特殊字符作为原子的结果:{Result}")
# 特殊字符作为原子的结果:<re.Match object; span=(1, 2), match='+'>

3.一些非打印字符作为原子
所谓的非打印字符,是一些在字符串中的格式控制符号,例如:\n回车及\t制表符号等。例如下表所示列出了正则表达式中常用的非打印字符及其含义。

import re
pattern = '\n'
String = """tyhjhgtrsdfg
sn"""
#re.search()函数对整个字符串搜索,并返回第一个匹配字符串的match对象
Result = re.search(pattern,String)

print(f"非打印字符作为原子的结果:{Result}")
# 非打印字符作为原子的结果:<re.Match object; span=(12, 13), match='\n'>

4.使用“通用字符类型”作为原子
前面介绍的不管是打印字符还是非打印字符作为原子,都是一个原子只能匹配一个字符。而有时我们需要一个原子可以匹配一类字符,例如,匹配所有数字不是一个数字,匹配所有字母而不是一个字母,这时就要使用“通用字符类型”了。

字母 意义
/w 匹配任意一个字母、数字或者下划线
/W 匹配除字母、数字和下划线意外的任意一个字符
/d 匹配仍以一个十进制数
/D 匹配除十进制数意外的任意一个其他字符
/S 匹配除空白字符意外的任意一个其他字符
/s 匹配任意一个空白字符
import re
pattern ='\who\w'
String = "wo shi who23"
#re.search()函数对整个字符串搜索,并返回第一个匹配字符串的match对象
Result = re.search(pattern,String)

print(f"通配符作为原子的结果:{Result}")
# 通配符作为原子的结果:<re.Match object; span=(7, 11), match='who2'>

5.原子表
代表某一类的原子太多了,系统不能全都给提供出来,例如数字中的奇数(1、3、5、7、9、)、字母中的元音字母(a、e、i、o、u)等。所以就需要我们可以自己定义出特定的“类原子”,使用原子表“[]”就可以定义一组彼此地位平等的原子,且从原子表中仅选择一个原子进行匹配。
在Python中,原子表由[]表示,比如[xyz],就是一个原子表,这个原子表中定义了3个原子,这3个原子的地位平等。

import re
pattern1 ='\wf[gj]\w'
pattern2 ='\wf[^gj]\w'
pattern3 ='\wf[gj]\W'

String = "abcdefgjikdlfk"
#re.search()函数对整个字符串搜索,并返回第一个匹配字符串的match对象
Result1 = re.search(pattern1,String)
Result2 = re.search(pattern2,String)
Result3 = re.search(pattern3,String)
print(f"pattern1:{Result1}")
print(f"pattern2:{Result2}")
print(f"pattern3:{Result3}")
# pattern1:<re.Match object; span=(4, 8), match='efgj'>
# pattern2:None
# pattern3:None
  • 元字符
符号 说明
. 表示任意字符
^ 表示字符开头
$ 表示字符串结尾
*, +, ? '*'表示匹配前一个字符重复 0 次到无限次,'+'表示匹配前一个字符重复 1次到无限次,'?'表示匹配前一个字符重复 0 次到1次
{m} 匹配前一个字符 m 次
{m,n} 匹配前一个字符 m 到 n 次
{m,n}? 匹配前一个字符 m 到 n 次,并且取尽可能少的情况

1.任意匹配元字符

import re
String = "abcdefgjikdlfk"
pattern = 'a.c'
Result = re.search(pattern,String)
print(f"结果:{Result}")
# 结果:<re.Match object; span=(0, 3), match='abc'>

2.边界限制元字符
边界限制符,’^’匹配字符串的开始,使用’$’匹配字符串的结束

import re
String = 'Hello'
pattern1 = '^H'
pattern2 = 'o$'
Result1 = re.search(pattern1, String)
Result2 = re.search(pattern2, String)
print(f"结果1:{Result1}")
print(f"结果2:{Result2}")
# 结果1:<re.Match object; span=(0, 1), match='H'>
# 结果2:<re.Match object; span=(4, 5), match='o'>

3.限定符
常见的限定符包括*、?、+、{n}、{n,}、{n,m}

import re
String = 'mnjsassssh'
pattern1 = 'as{2}'
pattern2 = 'as{3}'
pattern3 = 'as{2,}'
Result1 = re.search(pattern1, String)
Result2 = re.search(pattern2, String)
Result3 = re.search(pattern3, String)
print(f"结果1:{Result1}")
print(f"结果2:{Result2}")
print(f"结果3:{Result3}")
# 结果1:<re.Match object; span=(4, 7), match='ass'>
# 结果2:<re.Match object; span=(4, 8), match='asss'>
# 结果3:<re.Match object; span=(4, 9), match='assss'>

4.模式选择符
模式选择符’|’
使用模式选择符,可以设置多个模式,匹配时,可以从中选择任意一个模式匹配。

import re
String = 'mnjsaokssh'
pattern = 'mn|ji'
Result = re.search(pattern, String)
print(f"结果1:{Result}")
# 结果1:<re.Match object; span=(0, 2), match='mn'>

5.模式单元
模式单元符(),可以使用’()’将一些原子组合成一个大原子使用,小括号括起来的部分会被当做一个整体去使用

import re

String = 'mnjsassssh'
pattern1 = '(ss){1,}'#ss至少出现一次
pattern2 = '(ss){1}' #ss出现一次
pattern3 = '(as){1,}'#a字母后的s至少出现一次
pattern4 = '(as){1}'#a字母后的s出现一次
Result1 = re.search(pattern1, String)
Result2 = re.search(pattern2, String)
Result3 = re.search(pattern3, String)
Result4 = re.search(pattern4, String)
print(f"结果1:{Result1}")
print(f"结果2:{Result2}")
print(f"结果3:{Result3}")
print(f"结果4:{Result4}")
# 结果1:<re.Match object; span=(5, 9), match='ssss'>
# 结果2:<re.Match object; span=(5, 7), match='ss'>
# 结果3:<re.Match object; span=(4, 6), match='as'>
# 结果4:<re.Match object; span=(4, 6), match='as'>
  • 模式修正符
符号 含义
I 匹配时忽略大小写
M 多行匹配
L 做本地化识别匹配
U 根据Unicode字符及解析字符
S 让.匹配包括换行符,即用了该模式修正后,”.”匹配就可以匹配任意的字符了

忽略大小写

import re
pattern1 = "python"
pattern2 = "python"
string = "abcdfphp345Pythony_py"
result1 = re.search(pattern1, string)
result2 = re.search(pattern2, string, re.I)
print(f"结果1:{result1}")
print(f"结果2:{result2}")
# 结果1:None
# 结果2:<re.Match object; span=(11, 17), match='Python'>
  • 贪婪模式与懒惰模式
import re
pattern1 = "p.*y"  # 贪婪模式
pattern2 = "p.*?y"  # 懒惰模式
string = "abcdfphp345pythony_py"
result1 = re.search(pattern1, string)
result2 = re.search(pattern2, string, re.I)
print(f"贪婪模式结果:{result1}")
print(f"懒惰模式结果:{result2}")
# 贪婪模式结果:<re.Match object; span=(5, 21), match='php345pythony_py'>
# 懒惰模式结果:<re.Match object; span=(5, 13), match='php345py'>
  • 常用函数
    1.search
    re.search---re.search扫描整个字符串并返回第一个成功的匹配
    2.match
    re.match---从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none
import re
string = "ipythonajsoasaoso"
pattern = "ipython."
result = re.match(pattern, string)
result1 = re.match(pattern, string).span()
print(f"结果1:{result}")
print(result1)

# 结果1:<re.Match object; span=(0, 8), match='ipythona'>
# (0, 8)

import re
string = "ipythonajsoasaoso"
pattern = "python"
result = re.match(pattern, string)
print(f"结果:{result}")
# 结果:None

3.全局匹配函数
将符合模式的全部内容都匹配出来
(1)使用re.compile()对正则表达式进行预编译
(2)编译后使用findall()根据正则表达式从原字符串中将匹配的解决全部找出

import re
string = "helloipythonajsoasaospythono"
result = re.compile(".python.").findall(string) #找出符合模式的所有结果
print(f"结果:{result}")
# 结果:['ipythona', 'spythono']

4.re.sub()函数
根据正则表达式来实现替换某些字符串
re.sub(pattern, rep, string, max)
第一个参数对应的正则表达式,第二个参数为要替换成的字符串,第三个参数为源字符串,第四个参数为可选项,代表最多替换的次数,如果忽略不写,则会将符合模式的结果全部替换。

import re
string = "bnsdBBjsdkBBlsBBdkBBs"
pattern = "BB"
result1 = re.sub(pattern,"**",string)  #全部替换
result2 = re.sub(pattern,"**",string,1)  #最多替换1次
result3 = re.sub(pattern,"**",string,2)  #最多替换2次
print(f"结果1:{result1}")
print(f"结果2:{result2}")
print(f"结果3:{result3}")
# 结果1:bnsd**jsdk**ls**dk**s
# 结果2:bnsd**jsdkBBlsBBdkBBs
# 结果3:bnsd**jsdk**lsBBdkBBs

相关文章

  • JS库函数~正则表达式及表单、ip验证实例

    本文内容: 1.什么是正则表达式? 2.正则表达式限定符、选择匹配符、字符匹配符 3.常用的正则表达式 4.创建R...

  • Java中的正则匹配

    1.Java正则表达式的语法与示例 2.JAVA正则表达式匹配,替换,查找,切割 3.在线正则调试工具 4.命名捕...

  • 正则表达式过滤字符串中的js script脚本

    字符串使用正则表达式过滤js脚本 1.例子: 2.正则表达式: 3.匹配结果: 4.可以在js或java等中处理,...

  • 9.javascript 正则表达式

    学习要点: 1.什么是正则表达式2.创建正则表达式3.获取控制4.常用的正则 假设用户需要在 HTML 表单中填写...

  • 关于正则表达式

    1.正则表达式的作用: 2.定位符的作用,定位首和尾: 3.用于检测账号和密码的输入格式是否正确: 4.正则表达式...

  • 4.正则表达式

    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 原子原子是正则表达式的最基本的...

  • 正则表达式 python 实现

    正则表达式 1.原子2.元字符3.模式修正4.贪婪模式5.懒惰模式 1.原子 原子是正则表达式中最基本的组成单位,...

  • 正则表达式汇总

    1.正则表达式一般命名为regex 2.JS正则表达式常用的方法 方法举例 3.常用限定符号 4.常用元字符 5....

  • js-day17

    A.我今天学了什么 1.正则表达式 2.定义正则表达式 3.字符集 4.预定义字符集 5.数量词 6.选择和分组 ...

  • 4. Python 正则表达式

    正则表达式 正则表达式是一个特殊的字符序列,用于检查字符串是否与某种模式匹配 正则表达式测试工具 常用匹配规则 常...

网友评论

      本文标题:4.正则表达式

      本文链接:https://www.haomeiwen.com/subject/nupjhktx.html