首页 > 编程语言 >python中如何使用正则表达式查询字符串

python中如何使用正则表达式查询字符串

时间:2023-05-30 17:06:20浏览次数:50  
标签:匹配 string re python pattern 正则表达式 字符串 match


'''
Created on 2019年12月2日

@author: hp
'''
'''上一篇文章介绍了那么多关于正则表达式的用法,现在终于到了python中如何使用正则表达式了,不急,请诸君慢慢来'''
'''
之前在讲字符串时,已经说过了字符串的格式化输出,大家没看的可以看我的上一篇文章
格式化输出时,是含有模式串的,同样的,在python里面,正则表达式就是作为模式串被使用的
如:匹配一个不是字母的一个字符串的正则表达式表示的模式字符串
'[^a-zA-Z]'
再如;匹配一个m开头的单词:
'\bm\w*\b'
上面的模式字符串真的正确吗?事实上,他是错误的,因为一个\表示的是转义字符,需要在加上一个才能表示真正的\
正确写法:
'\\bm\\w*\\b'
python的开发人员考虑到了这样比较麻烦,于是有了简单的写法,即在模式字符串前面加上r或R,这样的话里面的字符就都不需要转义了
所以上面的模式字符串也可以写成如下形式
r'\bm\w*\b'
tip: 并不是所有的反斜杠都需要转义,如^\d{8}$中的反斜杠并不需要转义,因为\d并没有特殊意义.这里还是建议大家都用r或R开头的方式使用原生字符串
'''
# '''使用re模块实现正则表达式'''
# 使用正则表达式,需要导入rm模块
# 即:
# import re
# 1.match()方法
# match()方法用于从字符串的开始处进行匹配,如果在起始位置匹配成功,则返回对象,
# 否则返回None,其语法格式如下:
# re.match(patten,string,[flags])
# pattern表示模式字符串,由要匹配的正则表达式转换而来
# string表示要匹配的字符串
# flags表示标志位,用于控制匹配方式,如是否区分大小写.常用的标志如下
# A或ASCII         对于\w \W \b \B \d \D \s \S只进行ASCII匹配
# I或IGNORECASE    执行不区分大小写的匹配
# M或MULTILINE     将^和$用于包括整的字符串的开始和结尾的每一行(默认情况下,仅适用于整个字符串的开始和结尾处)
# S或DOTALL        使用'.'字符匹配所有字符,包括换行符
# X或VERBOSE       使用模式字符串中未转义的空格和注释
# 例如,匹配字符串是否以mr_开头,不区分大小写,代码如下
import re
pattern=r'mr_\w+'
string='MR_SHOP mr_shop'
match=re.match(pattern,string,re.I)
# 上述方法返回一个Match对象,该对象有如下方法:
# start()方法:返回匹配值的起始位置
# end()       返回匹配值的结束位置
# span()      返回匹配位置的元组
# group()     返回匹配到的字符串
# 还提供了string 属性,用以获取要匹配的字符串
print(match) 
print(match.start(),match.end(),'\n',match.span(),'\n',match.string,'\n',match.group())
# 输出结果:
# <re.Match object; span=(0, 7), match='MR_SHOP'>
# 0 7 
#  (0, 7) 
#  MR_SHOP mr_shop 
#  MR_SHOP
string="abcMR_SHOP mr_shop"
match=re.match(pattern,string,re.I)
print(match)
# 输出结果:
# None
# rm的serch()方法用于在整个字符串中搜索第一个匹配到的值,也就是说,他不在是想
# match()方法一样只匹配字符串最开始的部分,而是遍历整个字符串,一直到匹配到或遍历完为止
# 与match()方法相同,匹配到返回Match对象,否则返回None
# findall()用以查找所有符合的字符串,返回的是一个由Match对象组成的列表,用法与前两个相同
#只是要对findall()方法返回的列表进行遍历从而输出搜寻到的字符串
#例:
pattern=r'mr_\w+'
string='MR_SHOP mr_shop'
ans=re.findall(pattern,string,re.I)
print(ans)
#注意,如果指定的模式字符串中包含分组,则返回与分组匹配的文本列表,如:
pattern=r'[1-9]{1,3}(\.[0-9]{1,3}){3}'
str1='127.0.0.1 192.168.1.66'
ans=re.findall(pattern,str1)
print(ans)  #输出:['.1', '.66']
# 输出与预期的不一致,这是因为当模式字符串中含有分组时,得到的结果会是分组中模式字符串的结果,如果想要对整个模式字符串匹配,应该对整个字符串分组
# 然后在获取结果时只取返回的列表的每一个元素(是一个元组)的第一个元素
pattern=r'([1-9]{1,3}(\.[0-9]{1,3}){3})'
ans=re.findall(pattern,str1)
for x in ans:
    print(x[0])
#输出:127.0.0.1
# 192.168.1.66
'''字符串替换方法sub()'''
# re.sub(pattern, repl, string, count, flags)
# pattern表示模式字符串
# repl表示替换的字符串
# string表示要被查找的原始字符串
# count(可选)表示模式匹配后替换的最大次数,默认值为0,表示替换所有的匹配
# flags(可选)表示标志位,用于控制匹配方式,常用的标志在介绍match()方法时已经介绍过,这里不再列举
pattern=r'1[345678]\d{9}'
string='中奖号码为:84978981 联系电话为:13122782807'
result=re.sub(pattern,'1xxxxxxxxxx', string)
print(result)
'''使用正则表达式分割字符串'''
# re.split(pattern, string, maxsplit, flags)
# maxsplit表示最大拆分多少次(可选)
# flags表示匹配模式(可选)
pattern=r'[?|&]'
url='http://www.mingsoft.com/login.jsp?username="mr"pwd="mrsoft"'
result=re.split(pattern, url)
print(result)
#输出为:['http://www.mingsoft.com/login.jsp', 'username="mr"pwd="mrsoft"']
'''关于正则表达式的介绍以及python中正则表达式的用法就介绍到这里了,笔者也是刚学,如果有不足之处,还请多多包涵'''


标签:匹配,string,re,python,pattern,正则表达式,字符串,match
From: https://blog.51cto.com/u_16144724/6380468

相关文章

  • 逆序的三位数 (10 分) python版
    逆序的三位数(10分)python版程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。输入格式:每个测试是一个3位的正整数。输出格式:输出按位逆序的数。输入样例:123输出样例:321'''Createdon2019年11......
  • 字符串专题
    字符串专题'''Createdon2019年12月1日@author:hp''''''截取字符串'''str2="我是迪迦奥特曼"str3=str2[:5]str4=str2[0:len(str2):2]print(str3,str4)#截取的字符串如果不存在,会出现异常,可以用try...except捕捉异常try:str5=......
  • leetcode 2707. 字符串中的额外字符
    2707.字符串中的额外字符给你一个下标从 0 开始的字符串 s 和一个单词字典 dictionary 。你需要将 s 分割成若干个 互不重叠 的子字符串,每个子字符串都在 dictionary 中出现过。s 中可能会有一些 额外的字符 不在任何子字符串中。请你采取最优策略分割 s......
  • jquery本地存储的数据格式只能是字符串,如需存储对象,需要转换后存储
    <!DOCTYPEhtml><htmllang="en"> <head> <metacharset="UTF-8"> <title>Title</title> <scriptsrc="js/jquery-3.5.1.min.js"></script> </head> <body> <scri......
  • Python-7递归函数
    1.递归函数:自己调用自己,有来有回,一去一回"""-*-coding:utf-8-*-@FileName:recursion.py@Software:PyCharm@Time:2023/5/1016:04@Author:Panda"""#递归函数:recursion,自己调用自己,有来有回,一去一回defrecursion(n):print("未调用前{}"......
  • 如何用ChatGPT学Python
    大家好,欢迎来到Crossin的编程教室!关于ChatGPT的能力,大家想必都已听说,很多同学应该都亲自体验过了。其在自然语言处理方面的出色表现,绝对是颠覆了之前大众对人工智能的印象但ChatGPT的能力还远不止对于语言文字的处理,它甚至可以对代码进行理解和生成,这有赖于它丰富的知识库和背......
  • python 装饰器
    一、核心思想在不改变被装饰对象内部代码和原有调用方式的基础之上在添加额外的功能二、装饰器的实现过程根据实际需要,一步一步满足需求,完成对装饰器的理解1、简易版本给index函数添加统计执行时间的功能importtimedefindex():time.sleep(3)print('frominde......
  • python selenium web网站登录缺口图片验证码识别
    deflogin():driver=webdriver.Chrome("browser_driver/chromedriver.exe")driver.get("http://xxxxxx/#/login")driver.maximize_window()sleep(1)driver.find_element(By.CSS_SELECTOR,'[placeholder="请输入手机号&qu......
  • python
    静态方法:需在类成员函数前面加上@staticmethod标记符,以表示下面的成员函数是静态函数。使用静态方法的好处是,不需要定义实例即可使用这个方法。另外,多个实例共享此静态方法。classPerson:grade=1def__init__(self,name):self.name=name......
  • Python excejs 执行js文件的时候 报编码错误的问题
    问题执行js的时候报图中的编码错误,直接执行js文件时能正常编译,在网上未找到关于这个问题的文章头疼了好久最终在各位大佬的帮助下解决了问题,便记录了下来:解决办法:一、修改报错文件subprocess.py中的encoding编码:encoding=None--->encoding='utf-8'二、在引包的时......