iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python3正则表达式的几个高级用法
  • 771
分享到

python3正则表达式的几个高级用法

几个高级正则表达式 2023-01-31 07:01:05 771人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

一、 概述 本文举例说明python3正则表达式的一些高级级法,主要是各类分组,可应用于 1、复杂网页文件中的有用数据 例如,采用爬虫技术取得网页后,对网页内任何数据进

一、 概述
本文举例说明python3正则表达式的一些高级级法,主要是各类分组,可应用于
1、复杂网页文件中的有用数据
例如,采用爬虫技术取得网页后,对网页内任何数据进行提取分析
2、 各类配置文件
可能是属性文件,读取属性文件中的键值对
可能是数据库各类查询的复杂匹配的参数解析,类似mybatis的动态sql语句解析,hibernate动态参数sql分析
二、 理解正则表达式的贪婪与非贪婪
1、 生活中的贪婪与非贪婪
例如公司员工餐厅发小西红柿,每人一次可以领取1—10个
如果有的人每次都领取10个,则这个人属于贪婪,就是在不犯错时,每次取最多
如果有的人每次都领取1个,则这个人属于不贪婪,就是在不犯错时,每次取最少
2、 正则表达式的贪婪与非贪婪定义
只有前面的字符串内容可多可少时,才存在贪婪与非贪婪
1) 贪婪语法
.*,取尽可能多的任意字符
\w+,取尽可能多的任意英文字母与数字一次以上
\d{2,5},尽可能取到2--5个数字字母
\s+,},尽可能取到任意多个空格一次以上
.?,任意字符取0次,或1次,尽可能取1次

2)  非贪婪语法
就是在贪婪定义后面加一个?
.*?,取尽可能少的任意字符,尽可能不取
\w+?,取尽可能少的任意英文字母与数字,尽可能只取1个
\d{2,5},尽可能少数字字母,尽可能只取2个
\s+,},尽可能取到最少空格,尽可能只取1个空格
.??,任意字符取0次,或1次,尽可能取0次

3)  贪婪与贪婪的最终匹配
无论贪婪,还是非贪婪,都要与后面内容继续匹配,才能最终确定本次匹配内容,有时给合后面匹配内容时,两都取值相同

3、 示例分析如下
python语法如下
import re
匹配到的结果列表=re.findall(r’正则字符串’,要匹配的字符串,re.I|re.S)
re.I,表示忽略大小写
re.S,表示忽略回行,所有字符包括回行字符

字符串 贪婪正则 非贪婪正则
www.baidu.com/num 正则:
www\.baidu\.com\/.*
则能匹配到
www.baidu.com/num
有num
正则
www\.baidu\.com\/.*?
则能匹配到
www.baidu.com/
无num
www.baidu.com/num/456 www\.baidu\.com\/.*\/\d+
则能匹配到
www.baidu.com/num/456
www\.baidu\.com\/.*?\/\d+
则能匹配到
www.baidu.com/num/456
此时与贪婪正则匹配相同
一段网页文本,希望能求出每个div的innerhtml
<div>….</div>
<div>….</div>
<div>….</div>
<div>….</div>
正则
<div>.*</div>
则不能匹配出每个<div>标签之间的文本innerText
正则
<div>.*?</div>
则能匹配出每个<div>标签之间的文本innerText

4、示例代码如下

import re
s1=re.findall(r'\D+\d+','abc123456') #结果为:['abc123456']
s2=re.findall(r'\D+\d+?','abc123456') #结果为:['abc1']
s2=re.findall(r'\D+\d*','abc123456') #结果为:['abc123456']
s2=re.findall(r'\D+\d*?','abc123456') #结果为:['abc']
s2=re.findall(r'\D+\d{2,4}','abc123456') #结果为:['abc1234']
s2=re.findall(r'\D+\d{2,4}?','abc123456',re.I) #结果为:['abc12']
s2=re.findall(r'\D+\d?','abc123456',re.I) #结果为:['abc1']
s2=re.findall(r'\D+\d??','abc123456',re.I) #结果为:['abc']

三、 正则表达式的自定义命名分组,(?P)
1、 语法说明
一个正则表达式可以有多个自定义名称的分组,可以能过分组名称提取到匹配的字符串
每一个分组定义是(?P<自定义分组名称>正则字符串)
例如
pattern=r’正则1(?P<组1>组1正则)正则2(?P<组2>组2正则)正则3(?P<组3>组3正则)’

2、 需求如下
这是一段java代码字符串,有下面几种分析需求
1) 需求1,求3个参数,,,,3组实现
a) 每个变量的数据类型
类型名称前后有数量不相同的空格
b) 每个变量名称
变量名称前有数量不相同的空格,后面有等号,等号前后有数量不相同的空格
c) 每个变量的值
值的前后有数量不相同的空格
变量最后一定有分号
2) 需求2,求2个参数, ,,2组实现
a) 每个变量名称
要清除变量前后空格
b) 每个变量的值
要清除值前后空格

3) 需求3,求1个参数,,1组实现
每个变量的值
要清除值前后空格

4) 需求4,求1个参数,,1组实现
每个变量名称
要清除变量名称前后空格

3、 示例代码

str='''
String s1="学习java";
String s2=  " ";
Float   价格=24000.89;
String desc =  "用于找工作技能提升。。。" ;
Integer num  =   12567   ;

'''

import re
#需求1,,分3组:<type>,<name>,<value>,求数据类型,变量名称,变量的值,下面3种求法,结果相同
s1=re.findall(r'(?=String|Float|Integer)(?P<type>\w+)\s+(?P<name>.*?)\s*?=\s*?(?P<value>.*?)\s*?;',str,re.I|re.S);              #结果是:[('String', 's1', '"学习java"'), ('String', 's2', '  " "'), ('Float', '价格', '24000.89'), ('String', 'desc', '  "用于找工作技能提升。。。"'), ('Integer', 'num', '   12567')]
s1=re.findall(r'(?P<type>String|Float|Integer\s+?\w+)\s+(?P<name>.*?)\s*?=\s*?(?P<value>["\d].*?)\s*?;',str,re.I|re.S);              #结果是:[('String', 's1', '"学习java"'), ('String', 's2', '  " "'), ('Float', '价格', '24000.89'), ('String', 'desc', '  "用于找工作技能提升。。。"'), ('Integer', 'num', '   12567')]
#优化上面,当变量前面有空格时,要清除["\d],表示双引号或数字开头,匹配结果自动加入到<value>组,正则语法为:不消耗前缀
s1=re.findall(r'(?=String|Float|Integer)(?P<type>\w+)\s+(?P<name>.*?)\s*?=\s*?(?=["\d])(?P<value>.*?)\s*?;',str,re.I|re.S);  #结果是:[('String', 's1', '"学习java"'), ('String', 's2', '" "'), ('Float', '价格', '24000.89'), ('String', 'desc', '"用于找工作技能提升。。。"'), ('Integer', 'num', '12567')]

#需求2,分2组:<name>,<value>,求变量名称,变量的值,
s1=re.findall(r'\s+?(?P<name>\S+?)\s*?=\s*?(?P<value>["\d].*?)\s*?;',str,re.I|re.S);     #结果是:[('s1', '"学习java"'), ('s2', '" "'), ('价格', '24000.89'), ('desc', '"用于找工作技能提升。。。"'), ('num', '12567')]

#需求3,分1组<value>,求每个变量的值,要清除首尾空格,给出2种求法
s1=re.findall(   r'=\s*?(?P<value>[\d"].*?)\s*?;',str,re.I|re.S);     #结果是:['"学习java"', '" "', '24000.89', '"用于找工作技能提升。。。"', '12567']
s1=re.findall(   r'=\s*?(?=[\d"])(?P<value>.*?)\s*?;',str,re.I|re.S); #结果是:['"学习java"', '" "', '24000.89', '"用于找工作技能提升。。。"', '12567']


#需求4,分1个<name>只取变量名称
s1=re.findall(r'.*?\s+(?P<name>\w+?)\s*?=.*?;',str,re.I|re.S); #结果是:['s1', 's2', '价格', 'desc', 'num']

四、 应用扩展
可以采用类似的方法,对任意复杂业务的sql语句进行配置分析,可能有任意多个字段条件操作,每个字段的值可能有或无,或在某一个范围,这样结合前台提交,后台用正则分组,可以提取任意复杂的sql条件查询,适用于hibernate的动态查询,及springjdbc自定义sql

1、 实现需求
当一个分组内容,重复出现2次或以上时,第2次起,可以引用前面定义的分组匹配,即
r’(P?pattern1)…(P?pattern2)…(P?pattern2)…(?P=name1)…(P=name2)…(?P=name3)’

即(?P=name1)重复匹配前面定义的(?Ppattern1),
(?P=name2)重复匹配前面定义的(?Ppattern2)

2、 示例如下


import re
#假设下面的每门课的学费,例如oracle:500元,java:1550元
str='''
  oracle:500,
  java:1550,
  bigdata:2000,
  PHP:500
  <oracle>500</oracle>
  <java>1550</java>
  <bigdata>2000</bigdata>
  <php>500</php>
  '''

#下面2行代码结果相同
s1=re.findall(r'oracle:(?P<name1>\d+),.*?java:(?P<name2>\d+),.*?bigdata:(?P<name3>\d+),.*?php:(?P<name4>\d+).*?<oracle>(?P=name1)</oracle>.*?<java>(?P=name2)</java>.*?<bigdata>(?P=name3)</bigdata>.*?<php>(?P=name4)</php>.*?',str,re.I|re.S)  #结果是:['500', '1800', '2000', '555']
s1=re.findall(r'oracle:(?P<name1>\d+),.*?java:(?P<name2>\d+),.*?bigdata:(?P<name3>\d+),.*?<oracle>(?P=name1)</oracle>.*?<java>(?P=name2)</java>.*?',str,re.I|re.S)  #结果是:['500', '1800', '2000', '555']

五、 数字分组,\number
1、 语法说明
每一段正则用一个加圆括起来时,便自动构成一个组,包括(?Ppattern)自定义命名组,也加入到分组序号中
如果后面有前面圆括中相同部分,则用数字序号表示匹配相同部分
r’(正则1)…(正则2)…(正则3) 。。。\1….\2….\3…’,
这里出现\1,表示匹配前面第1个圆括号正则内容,
这里出现\2,表示匹配前面第2个圆括号正则内容

2、 可以用数组分组取得自定义命名分组
例如用:\2 取得前面第2个圆括号(?Ppattern123)的内容
3、 示例如下


import re
#假设下面的每门课的学费,例如oracle:500元,java:1550元,bigdata:2000元,php:500元
str='''
  oracle:500,
  java:1550,
  bigdata:2000,
  php:500
  <oracle>500</oracle>
  <java>1550</java>
  <bigdata>2000</bigdata>
  <php>500</php>
  '''

#下面需求求所有每门课的学费,只求具体数字,体会(?P<name>)用法,下面2行代码结果相同
s1=re.findall(r'\D+:(?P<name>\d+),??',str,re.I|re.S)  #结果是:['500', '1550', '2000', '500']
s1=re.findall(r'(\w+):(?P<name1>\d+),.*?(\w+):(?P<name2>\d+),.*?(\w+):(?P<name3>\d+),.*?(\w+):(?P<name4>\d+).*?',str,re.I|re.S)  #结果是:[('oracle', '500', 'java', '1550', 'bigdata', '2000', 'php', '500')]

#下面需求,求出课程名称,及费用,4门课
s1=re.findall(r'.*?(\w+):(?P<name1>\d+),.*?(\w+):(?P<name2>\d+),.*?(\w+):(?P<name3>\d+),.*?(\w+):(?P<name4>\d+).*?',str,re.I|re.S)  #结果是:[('oracle', '500', 'java', '1550', 'bigdata', '2000', 'php', '500')]
#下面3行代码结果相同,括号的序号从1开始,(?P<name>...)也算一个括号
s1=re.findall(r'(\w+):(?P<name1>\d+),.*?(\w+):(?P<name2>\d+),.*?<\1>(?P=name1)</\1>.*?<\3>(?P=name2)</\3>.*?',str,re.I|re.S)  #结果是:[('oracle', '500', 'java', '1550')]
s1=re.findall(r'(\w+):(?P<name1>\d+),.*?(\w+):(?P<name2>\d+),.*?<\1>\2</\1>.*?<\3>(?P=name2)</\3>.*?',str,re.I|re.S)  #结果是:[('oracle', '500', 'java', '1550')]
s1=re.findall(r'(\w+):(?P<name1>\d+),.*?(\w+):(?P<name2>\d+),.*?<\1>\2</\1>.*?<\3>\4</\3>.*?',str,re.I|re.S)  #结果是:[('oracle', '500', 'java', '1550')]

#下面2行结果相同
s1=re.findall(r'.*?(\w+):(?P<name1>\d+),.*?(\w+):(?P<name2>\d+),.*?(\w+):(?P<name3>\d+),.*?(\w+):(?P<name4>\d+).*?<\1>\2</\1>.*?',str,re.I|re.S)  #结果是:[('oracle', '500', 'java', '1550', 'bigdata', '2000', 'php', '500')]
s1=re.findall(r'.*?(\w+):(?P<name1>\d+),.*?(\w+):(?P<name2>\d+),.*?(\w+):(?P<name3>\d+),.*?(\w+):(?P<name4>\d+).*?<\1>(?P=name1)</\1>.*?',str,re.I|re.S)  #结果是:[('oracle', '500', 'java', '1550', 'bigdata', '2000', 'php', '500')]
#下面2行结果相同
s1=re.findall(r'.*?(\w+):(?P<name1>\d+),.*?(\w+):(?P<name2>\d+),.*?(\w+):(?P<name3>\d+),.*?(\w+):(?P<name4>\d+).*?<\1>(?P=name1)</\1>.*?<\3>\4</\3>.*?',str,re.I|re.S)  #结果是:[('oracle', '500', 'java', '1550', 'bigdata', '2000', 'php', '500')]
s1=re.findall(r'.*?(\w+):(?P<name1>\d+),.*?(\w+):(?P<name2>\d+),.*?(\w+):(?P<name3>\d+),.*?(\w+):(?P<name4>\d+).*?<\1>(?P=name1)</\1>.*?<\3>(?P=name2)</\3>.*?',str,re.I|re.S)  #结果是:[('oracle', '500', 'java', '1550', 'bigdata', '2000', 'php', '500')]
#下面2行结果相同
s1=re.findall(r'.*?(\w+):(?P<name1>\d+),.*?(\w+):(?P<name2>\d+),.*?(\w+):(?P<name3>\d+),.*?(\w+):(?P<name4>\d+).*?<\1>(?P=name1)</\1>.*?<\3>(?P=name2)</\3>.*?<\5>\6</\5>.*?',str,re.I|re.S)  #结果是:[('oracle', '500', 'java', '1550', 'bigdata', '2000', 'php', '500')]
s1=re.findall(r'.*?(\w+):(?P<name1>\d+),.*?(\w+):(?P<name2>\d+),.*?(\w+):(?P<name3>\d+),.*?(\w+):(?P<name4>\d+).*?<\1>(?P=name1)</\1>.*?<\3>(?P=name2)</\3>.*?<\5>(?P=name3)</\5>.*?',str,re.I|re.S)  #结果是:[('oracle', '500', 'java', '1550', 'bigdata', '2000', 'php', '500')]

#下面2行结果相同
s1=re.findall(r'.*?(\w+):(?P<name1>\d+),.*?(\w+):(?P<name2>\d+),.*?(\w+):(?P<name3>\d+),.*?(\w+):(?P<name4>\d+).*?<\1>(?P=name1)</\1>.*?<\3>(?P=name2)</\3>.*?<\5>\6</\5>.*?<\7>\8</\77>.*?',str,re.I|re.S)  #结果是:[('oracle', '500', 'java', '1550', 'bigdata', '2000', 'php', '500')]
s1=re.findall(r'.*?(\w+):(?P<name1>\d+),.*?(\w+):(?P<name2>\d+),.*?(\w+):(?P<name3>\d+),.*?(\w+):(?P<name4>\d+).*?<\1>(?P=name1)</\1>.*?<\3>(?P=name2)</\3>.*?<\5>\6</\5>.*?<\7>(?P=name4)</\7>.*?',str,re.I|re.S)  #结果是:[('oracle', '500', 'java', '1550', 'bigdata', '2000', 'php', '500')]

s1=re.findall(r'(\D+):(?P<name1>\d+),.*?(\D+):(?P<name2>\d+),.*?(\D+):(?P<name3>\d+),.*?(\D+):(?P<name4>\d+),.*?<\1>(?P=name1)<\1>.*?',str,re.I|re.S)  #结果是:['500', '1800', '2000', '555']

#下面
s1=re.findall(r'oracle:(?P<name1>\d+),.*?java:(?P<name2>\d+),.*?bigdata:(?P<name3>\d+),.*?php:(?P<name4>\d+).*?<oracle>(?P=name1)</oracle>.*?<java>(?P=name2)</java>.*?<bigdata>(?P=name3)</bigdata>.*?<php>(?P=name4)</php>.*?',str,re.I|re.S)  #结果是:['500', '1800', '2000', '555']
s1=re.findall(r'oracle:(?P<name1>\d+),.*?java:(?P<name2>\d+),.*?bigdata:(?P<name3>\d+),.*?<oracle>(?P=name1)</oracle>.*?<java>(?P=name2)</java>.*?',str,re.I|re.S)  #结果是:['500', '1800', '2000', '555']

六、 前置肯定分组,(?=pattern)
1、 实现需求
表示以。。。开头,不消耗匹配内容,而是加入后面正则表达式中,所以也称为前置不消耗分组
r’…(?=pattern1)(?Ppattern123)…’等效于
r’… (?Ppattern1pattern123)…’

2、 示例如下


#前置肯定(?=pattern)
import re

#查询url是否以Http://www.开头
s1=re.findall(r'(?=http:\/\/www\.)(?P<name>.*)','http://www.baidu.com') #结果是:['http://www.baidu.com']
s1=re.findall(r'(?=http:\/\/www\.)(?P<name>.*)','https://www.baidu.com') #结果是:[]


七、 前置否定分组,(?!pattern)
1、 实现需求
表示不包含。。。开头的其余部分,
r’…(!pattern1)(?Ppattern123)…’等效于
r’… (?P!pattern1pattern123)…’,pattern1的内容只是一个最小正则内容

2、 示例如下


#前置否定(?!pattern)
import re

#查询url不包含http://开头以外的其余部分
s1=re.findall(r'(?!http:\/\/)(?P<name>www.*)','http://www.baidu.com') #结果是:['www.baidu.com']

#查询所有非数字部分,即前面不包含数字,后面是字母
s1=re.findall(r'(?!\d+)(?P<name>\D+)','123java456oracle367bigdata478') #结果是:['java', 'oracle', 'bigdata']


八、 后置肯定分组,(?<=pattern)
1、 实现需求
表示包含以。。。结尾的所有部分,不消耗匹配内容,而是加入前面分组中
r’… (?Ppattern123)(?<=pattern1)…’等效于
r’… (?Ppattern123pattern1)…’

2、 示例如下


#后置肯定(?<=pattern)
#下面匹配前面是数字一组,后面包含数字结尾的所有分组
import re
 s=re.findall(r'(?P<name>\d+)(?<=\d)','987java678abc891abe2345stu2454dy')#结果是:['987', '678', '891', '2345', '2454']
#下面匹配前面是字母一组,后面包含字母的所有分组
 s=re.findall(r'(?P<name>\D+)(?<=\D)','java678abc891abe2345stu2454dy')#结果是:['java', 'abc', 'abe', 'stu', 'dy']

九、 后置否定分组,(?


#后置否定(?<=pattern)
#下面匹配前面是数字一组,后面不包含字母的所有分组
 s=re.findall(r'(?P<name>\d+)(?<!\D)','987java678abc891abe2345stu2454dy')#结果是:['987', '678', '891', '2345', '2454']
#下面匹配前面是字母一组,后面不包含数字的所有分组
 s=re.findall(r'(?P<name>\D+)(?<!\d)','java678abc891abe2345stu2454dy')#结果是:['java', 'abc', 'abe', 'stu', 'dy']

十、 消耗—不捕获-不参与分组的圆括号,(?:pattern)
1、 实现需求
参与匹配,不捕获,即不返回结果,不将匹配结果送给后面
类比前置肯定匹配(?=pattern)也不捕获结果,但将匹配结果送给后面分组
2、 示例如下



  str='''
        s=http://www-1.baidu.com
        s=https://www-2.baidu.com
        s=ftp://www-3.baidu.com
  '''
  #请注意,下面的str后面,没有re.S,否则操作有错,这里只对每一行进行正则匹配捕获
  s1=re.findall(r'(?:http|https|ftp):\/\/(?P<name>.*)',str)
  #结果是:['www-1.baidu.com', 'www-2.baidu.com', 'www-3.baidu.com']
  s1=re.findall(r'(?:http|https|ftp)(?P<name>:\/\/.*)',str)
  #结果是:['://www-1.baidu.com', '://www-2.baidu.com', '://www-3.baidu.com']

  s1=re.findall(r'(http|https|ftp):\/\/(?P<name>.*)',str)
  #结果是:[('http', 'www-1.baidu.com'), ('https', 'www-2.baidu.com'), ('ftp', 'www-3.baidu.com')]

  s1=re.findall(r'(?:https:)(?P<name>.*)',str,re.I)
  #结果是:['//www-2.baidu.com']

十一、 前置—后置位置颠倒及对比(?:pattern)
1、 实现需求
r‘…(?<=pattern1)mypattern(?=pattern2) …’
将后置放在前面,将前置放在后面,结果是
(?<=pattern1)后置参与匹配、不捕获、消耗
(?=pattern2)前置参与匹置、不捕获、消耗
2、 语法结果理解
1) 将后置放在前面时
因为他只参与后置前一个正则表达式的匹配、捕获、消耗,所以不参与
2) 将前置放在后面时
因为前置只参与他后面的一个前置,对后面的内容捕获,所以本段内容匹配、消耗、不捕获
3) mypattern有无分组,即圆括号,结果是一样的
4) 实际测试时,如果mypattern有圆括号,则此时的前置颠到效果与加入(?:pattern)一样
3、 示例如下


#前置肯定与后置肯定颠倒颠颠位置后,则匹配、不捕获、消耗
import re
str = r'<div class="test1"><h1><span>学习大数据bigData</span></h1></div>'
s1 = re.findall(r"(?<=<h1>).+?(?=</h1>)",str)
#前置与后置颠倒时,则只匹配、不捕获,可以理解为后置己经参与前面一个正则的捕获了,而前置放在后面,则对前面来说,不捕获结果
#结果是:['<span>学习大数据bigData</span>']

s1 = re.findall(r"(?:<h1>).+?(?=</h1>)",str)
#结果是:['<h1><span>学习大数据bigData</span>'],说明(?:pattern)不参与分组,但后面无分组时,则参与消耗
s1 = re.findall(r"(?:<h1>)(?P<id123>.+?)(?=</h1>)",str)
#结果是:['<span>学习大数据bigData</span>'],说明(?:pattern)不参与分组,但后面有分组时,则不参与消耗
s1 = re.findall(r"(?:<h1>)(?P<id123>.+?)(?:</h1>)",str)
#结果是:['<span>学习大数据bigData</span>'],说明(?:pattern)不参与分组,前后有分组时,则不参与消耗


s1 = re.findall(r"(?=<h1>).+?(?=</h1>)",str)
#结果是:['<h1><span>学习大数据bigData</span>'],前置发挥正常作用,前置放在后面时,匹配,不对前面消耗

s1 = re.findall(r"(?:<h1>).+?(?=</h1>)",str)
#结果是:['<h1><span>学习大数据bigData</span>'],说明(?:pattern)对后面无分组时,参与捕获、消耗

s1 = re.findall(r"(?:<h1>)(.+?)(?=</h1>)",str)
#结果是:['<span>学习大数据bigData</span>'],说明(?:pattern)对后面有分组时,消耗、但不参与捕获

created by 刘明
这里写图片描述

--结束END--

本文标题: python3正则表达式的几个高级用法

本文链接: https://www.lsjlt.com/news/190819.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python3正则表达式的几个高级用法
    一、 概述 本文举例说明python3正则表达式的一些高级级法,主要是各类分组,可应用于 1、复杂网页文件中的有用数据 例如,采用爬虫技术取得网页后,对网页内任何数据进...
    99+
    2023-01-31
    几个 高级 正则表达式
  • python3-正则表达式
    import re print(re.search("xyx","qxyasdfxuyxyxaqd"))#寻找 print(re.match("xya","qxyasdfxuyxyxaqd"))#从头匹配,失败返回None print(re...
    99+
    2023-01-31
    正则表达式
  • Python3 正则表达式
    1.导入正则表达式模块 import re 2.匹配数字 print(re.findall('[0-9]','qwe21ewq')) 输出结果: 3.匹配字符 print(re.findall('[a-zA-Z]','abC')) 输出...
    99+
    2023-01-30
    正则表达式
  • python3 shell 正则表达式
    突然自己悟到的一点小技巧,先写在这里,以免以后又忘记。有个字符串 s='''style="border-top:1px dotted #DDD;text-align:left;padding-left:5px;"><a href...
    99+
    2023-01-31
    正则表达式 shell
  • python3正则表达式笔记
    \d可以匹配一个数字,\w可以匹配一个子字母和数字.可以匹配任意字符\d{3}匹配3个字符\s匹配一个空格,\s+至少有一个空格\s{3,8}匹配3到8的数字\d{3}\-\d{3,8}'010-12345'\d{3}\-\d{3,8}[0...
    99+
    2023-01-31
    笔记 正则表达式
  • Python3的正则表达式详解
    目录1.简介2.切分字符串3.分组4.贪婪匹配5.编译总结1.简介 # 正则表达式:用来匹配字符串的武器; # 设计思想:用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符...
    99+
    2024-04-02
  • 详解JavaScript高级正则表达式
    目录JavaScript高级正则表达式1.正则表达式概述1.1什么是正则表达式1.2正则表达式的特点2.正则表达式在js中的使用2.1正则表达式的创建2.2测试正则表达式3.正则表达...
    99+
    2024-04-02
  • Flex正则表达式的高级规则有哪些
    这篇文章主要为大家展示了“Flex正则表达式的高级规则有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Flex正则表达式的高级规则有哪些”这篇文章吧。引言Flex正则表达式(regulare...
    99+
    2023-06-17
  • python3中的RE(正则表达式)-总
    1.引入正则模块(Regular Expression)     要使用python3中的RE则必须引入 re模块 import re #引入正则表达式 2.主要使用的方法 match(), 从左到右进行匹配 #pattern 为要校...
    99+
    2023-01-31
    正则表达式
  • python3--re模块:正则表达式
    怎么判断一个手机号码是否符合规范?根据手机号码一共11位并且只以13,14,15,18开头的数字这些特点,写了一段代码如下:while True:     phone_number ...
    99+
    2023-01-30
    模块 正则表达式
  • 正则表达式高级用法之分组的使用教程
    目录分组的使用场景分组的使用方法捕获组分组的使用实例javascript 获取分组内容java 获取分组内容小结补充:正则表达式分组及常见的方法总结分组的使用场景 在书写正则表达式时...
    99+
    2024-04-02
  • python3正则表达式简单使用、sea
    raw string:转义字符’\’不解释为转义字符 re.search(pattern, string, flags=0) 返回匹配的match对象flags:正则表达式使用时的标记re.I->IGNORECASE 忽略正则的大...
    99+
    2023-01-31
    简单 正则表达式 sea
  • Python3常用正则表达式有哪些
    这篇文章主要介绍“Python3常用正则表达式有哪些”,在日常操作中,相信很多人在Python3常用正则表达式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python3常用正则表达式有哪些”的疑惑有所...
    99+
    2023-06-19
  • JavaScript高级正则表达式如何理解
    这篇文章将为大家详细讲解有关JavaScript高级正则表达式如何理解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。JavaScript高级正则表达式1.正则表达式概述1.1什么是正则表达式...
    99+
    2023-06-26
  • SQL正则表达式及mybatis中使用正则表达式的方法
    小编给大家分享一下SQL正则表达式及mybatis中使用正则表达式的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql...
    99+
    2024-04-02
  • python正则表达式的用法
    本篇内容介绍了“python正则表达式的用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!简单模式 我们...
    99+
    2024-04-02
  • Java 之正则表达式语法及常用正则表达式汇总
    正则表达式概念: 正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 正则表...
    99+
    2023-08-18
    正则表达式 java 开发语言
  • 正则表达式用法详解
    正则表达式之基本概念 在我们写页面时,往往需要对表单的数据比如账号、身份证号等进行验证,而最有效的、用的最多的便是使用正则表达式来验证。那什么是正则表达式呢? 正则表达式(Regul...
    99+
    2024-04-02
  • Python中正则表达式的用法
    在这里跟大家分享一个Python编程过程中的小知识点——正则表达式! 那正则表达式到底是什么呢?又是用来干什么的呢? 正则表达式 是包含文本和特殊字符的字符串, 为高级的文本模式匹配, 抽取, 与文本形式的搜索和替换功能提供了基础...
    99+
    2023-01-31
    正则表达式 Python
  • python正则表达式re.group()用法
    目录re.group()用法re.group()用法 在正则表达式中,re.group()方法是用来提取出分组截获的字符串,匹配模式里的括号用于分组。 举例说明: #!/usr/bi...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作