python正则表达式对字符串的查找匹配
作者:爱打羽毛球的小怪兽 发布时间:2022-02-21 12:39:50
标签:Python,字符串,匹配
Python中的正则表达式要用到re模块,下面先介绍一下正则表达式需要用到的特殊字符和说明
常用的RegEx基础语法
语法 | 说明 |
\d | 匹配一个数字字符 |
\D | 匹配一个非数字字符 |
\s | 匹配任何不可见字符(空格、制表符、换行符等) |
\S | 匹配任何可见字符 |
\w | 匹配任何单词字符 |
\W | 匹配任何非单词字符 |
. | 匹配所有字符 |
^ | 从字符串开头开始匹配,比如^\d表示以一个数字字符开头 |
$ | 从字符串末尾开始匹配,比如\d$表示以一个数字字符结尾 |
* | 匹配前一个字符任意次 |
+ | 匹配前一个字符一次或多次 |
? | 匹配前一个字符零次或一次 |
{m} | 匹配前一个字符m次 |
{m,n} | 匹配前一个字符最少m次最多n次 |
\ | 转义字符 |
[] | 比如[a-z]表示匹配从a到z之间的所有字符串 |
| | 或,比如A|B表示匹配A或B |
() | 精确匹配括号中指定的模式 |
常用的RegEx函数
函数 | 说明 |
---|---|
search | 从字符串中进行搜索,成功则返回匹配目标,失败则返回None |
match | 从字符串开头进行匹配,成功则返回匹配目标,失败则返回None |
fullmatch | 匹配整个字符串 |
split | 根据模式分割字符串 |
findall | 查找字符串中所有非重叠匹配 |
finditer | 类似于findall,但返回Python迭代器 |
sub | 用提供的字符串替代匹配模式 |
以下为部分示例:
对于split函数,我们在对字符串进行分割的时候可以直接调用split方法,再次不再进行
>>> import re#导入包
>>> a='xiaoming:wo jiao xiaoming,wo de dianhua shi +86-666666'
>>> print(re.search(pattern='\d+\W\d+',string=a))
<re.Match object; span=(45, 54), match='86-666666'>#此处输出的时一个match对象
>>> mp=re.search(pattern='\d+\W\d+',string=a)#查找电话号码
>>> print(mp.group())#使用group方法获取于指定模式相匹配的字符串
86-666666
>>> print(mp.start())#获取第一个匹配字符串的索引
45
>>> print(mp.end())#获取匹配字符串的
54
>>> print(mp.span())#获取索引范围
(45, 54)
>>> print(re.findall(pattern='\w+',string=a))
['xiaoming', 'wo', 'jiao', 'xiaoming', 'wo', 'de', 'dianhua', 'shi', '86', '666666']
>>> m_sub=re.sub(pattern='\w+:',string=a,repl='xiaohong:')#模式替代,使用repl传入的字符串替代匹配到的第一个字符串
>>> print(m_sub)
xiaohong:wo jiao xiaoming,wo de dianhua shi +86-6666
#编译模式
>>> p=re.compile('\d{6}')#预先设定好匹配的模式
>>> m1=p.search(a)#对预先设定好的模式调用查找
>>> print(m1.group())获取查找到的字符串
666666
不区分大小写匹配字符
#! /usr/bin/python3
import re
rebocop = re.compile(r'rebocop', re.I)
match = rebocop.search('ReboCop is part man, part machine, all cop.').group()
print(match)
管理复杂的正则表达式
如果您需要匹配的文本模式很简单,则正则表达式很好。但是匹配复杂的文本模式可能需要冗长,复杂的正则表达式。您可以通过告诉re.compile() 函数来缓解这种情况忽略正则表达式字符串中的空格和注释。可以通过将变量 re.VERBOSE 作为传递来启用此“详细模式” re.compile()的第二个参数。
#! /usr/bin/python3
import re
phoneRegex = re.compile(r'''(
(\d{3}|\(\d{3}\))? # area code
(\s|-|\.)? # separator
\d{3} # first 3 digits
(\s|-|\.) # separator
\d{4} # last 4 digits
(\s*(ext|x|ext.)\s*\d{2,5})? #extension
)''', re.VERBOSE)
请注意前一个示例如何使用三引号语法(’’’)创建一个多行字符串,以便您可以将正则表达式定义分布在多行上,使其更加清晰。正则表达式字符串中的注释规则与常规Python代码:#符号及其后的所有内容线被忽略。此外,正则表达式的多行字符串内的额外空格不被视为要匹配的文本模式的一部分。这使您可以组织正则表达式,以便更容易阅读。
从粘贴板的文字中提取邮箱和手机号码
#! /usr/bin/python3
# phoneAndEmail.py - Finds phone numbers and email address on the chipboard.
import pyperclip, re
americaPhoneRegex = re.compile(r'''(
(\d{3}|\(\d{3}\))? # area code
(\s|-|\.)? # separator
(\d{3}) # first 3 digits
(\s|-|\.) # separator
(\d{4}) # last 4 digits
(\s*(ext|x|ext.)\s*(\d{2,5}))? # extension
)''', re.VERBOSE)
chinesePhoneRegex = re.compile(r'1\d{10}')
emailPhoneRegex = re.compile(r'''(
[a-zA-Z0-9._%+-]+ # username
@ # @ symbol
[a-zA-Z0-9.-]+ # domain name
(\.[a-zA-Z]{2,4}) # dot-something
)''', re.VERBOSE)
# Find matches in clipboard text.
text = str(pyperclip.paste())
matches = []
for groups in americaPhoneRegex.findall(text):
phoneNum = '-'.join([groups[1], groups[3], groups[5]])
if groups[8] != '':
phoneNum += ' x' + groups[8]
matches.append(phoneNum)
for groups in emailPhoneRegex.findall(text):
matches.append(groups[0])
for groups in chinesePhoneRegex.findall(text):
matches.append(groups[0])
# copy results the clipboard.
if len(matches) > 0:
pyperclip.copy('\n'.join(matches))
print('Copied to clipboard:')
print('\n'.join(matches))
else:
print('No phone numbers or email addresses found.')
来源:https://blog.csdn.net/qq_57099024/article/details/122231002


猜你喜欢
- SQL Server 2008 备份数据库:1.打开SQL , 找到要备份的数据库 , 右键 >> 任务 >>备份2
- 使用Python IDLE时发现并没有清空当前窗口的快捷键,也没有像 clear 这样的命令,使用非常不便。新建一个 ClearWindow
- win10系统本地安装MySQL8.0.20,亲测可用,也是参考了其他大神的操作1. 下载Mysql ,官网下载地址:MySQL官网:链接直
- 这些问题可能导致数据值的改变。一般而言,上述问题可能在你使用非二进制串数据类型(如char,varchar,text等数据类型)的情况下发生
- 1.安装Python-LDAP(python_ldap-2.4.25-cp27-none-win_amd64.whl)pip install
- np.random模块常用的一些方法介绍名称作用numpy.random.rand(d0, d1, …, dn)生成一
- TensorFlow™是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machin
- 项目介绍我们先来看看成果:首先写了一个能够操作的GUI界面。其中两个按钮对应相应的功能:采集人脸:识别功能:我可是牺牲了色相五五五五。。。(
- 本文介绍了详解Python实现多进程异步事件驱动引擎,分享给大家,具体如下:多进程异步事件驱动逻辑逻辑code# -*- coding: u
- 一、枚举与字典类型字典类型的缺点:1.值可变 2.没有防止相同标签的功能枚举的特点:1.枚举类的值不可以被外界更改 2.不能存在相同的标签,
- 先看一下arena_match_index的表结构,大家注意表的索引结构CREATE TABLE `arena_match_index` (
- 利用mask(掩模)技术提取纯色背景图像ROI区域中的人和物,并将提取出来的人或物添加在其他图像上。1、实现原理先通过cv.cvtColor
- 前言最近在搞 Python 课程设计,想要搞一个好看的 UI,惊艳全班所有人。但打开 Qt Creator,Win7 风格的复古的按钮是在让
- 一、数字类型内置方法1.1 整型的内置方法作用描述年龄、号码、id号定义方式x = 10x = int('10')x = i
- 准备工作创建一个应用添加应用到配置创建一个html编写视图函数from django.shortcuts import render# Cr
- 使用正则表达式的几个步骤:1、用import re 导入正则表达式模块;2、用re.compile()函数创建一个Regex对象;3、用Re
- grid()函数概述grid()函数用于设置绘图区网格线。grid()的函数签名为matplotlib.pyplot.grid(b=None
- 目前为止,我们使用函数时所用的参数都是位置参数,即传入函数的实际参数必须与形式参数的数量和位置对应。而本节将介绍的关键字参数,则可以避免牢记
- 介绍Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。
- pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。这篇文章重点给大家介绍