我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python正则表达式对字符串的查找匹配

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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.')

总结

到此这篇关于python正则表达式对字符串的查找匹配的文章就介绍到这了,更多相关python字符串查找匹配内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python正则表达式对字符串的查找匹配

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

下载Word文档

猜你喜欢

Python正则表达式匹配字符串中的数字

这篇文章主要介绍了Python正则表达式匹配字符串中的数字,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下1.使用“\d+”匹配全数字
2023-06-01

Java 中如何使用正则表达式匹配字符串?(java正则表达式匹配字符串的方法是什么)

在Java编程中,正则表达式是一种强大的工具,用于在字符串中搜索、匹配和操作特定的模式。正则表达式提供了一种简洁而灵活的方式来处理文本数据。本文将详细介绍Java中使用正则表达式匹配字符串的方法。一、正则表达式的基本概念
Java 中如何使用正则表达式匹配字符串?(java正则表达式匹配字符串的方法是什么)
Java2024-12-19

怎么使用python正则表达式查找字符串

使用Python的re模块来使用正则表达式查找字符串。首先,导入re模块:```pythonimport re```然后,定义一个正则表达式模式:```pythonpattern = r"正则表达式模式"```接下来,使用re模块的find
2023-08-18

Python怎么在字符串中找到正则表达式所匹配的所有子串

这篇“Python怎么在字符串中找到正则表达式所匹配的所有子串”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么
2023-06-08

PHP如何多字节正则表达式匹配的设置字符串和正则表达式

在PHP中使用多字节正则表达式需要设置UTF-8编码字符串,使用标志u(Unicode支持)、i(不区分大小写)、m(多行匹配)和s(点号匹配换行符)。示例:mb_regex_encoding("UTF-8");$pattern="/^こんにちはs+.*$/u";PCRE支持Unicode属性、字符类、边界匹配、多行模式和非贪婪匹配。最佳实践包括设置UTF-8编码、使用Unicode支持标志、考虑使用Unicode属性和字符类,以及利用多行模式和非贪婪匹配。
PHP如何多字节正则表达式匹配的设置字符串和正则表达式
2024-04-02

Java如何多字节正则表达式匹配的设置字符串和正则表达式

摘要:在Java中使用多字节正则表达式时,需要设置字符串和正则表达式:设置字符串:编码为多字节方案(如UTF-8)转义特殊字符设置正则表达式:使用(?u)启用unicode模式使用多字节边界标记(?u)使用字符类(p{L})匹配多字节字符使用转义序列(uD83DuDE0A)匹配特定字符使用非贪婪限定符(*?)限制匹配
Java如何多字节正则表达式匹配的设置字符串和正则表达式
2024-04-02

PHP如何多字节字符串的正则表达式匹配

PHP多字节字符串正则匹配指南在PHP中处理多字节字符串时,正则表达式应使用特殊的考虑因素:使用mb_ereg函数系列,并指定字符串编码。修改正则表达式模式:使用字符类、边界、量词和Unicode属性。考虑编码转换以确保匹配准确性。最佳实践包括:始终指定字符集编码。根据需要修改正则表达式模式。谨慎使用Unicode属性。
PHP如何多字节字符串的正则表达式匹配
2024-04-02

Java如何多字节字符串的正则表达式匹配

本文详细介绍了如何在Java中使用正则表达式匹配多字节字符串。它涵盖了字符编码(UTF-16和UTF-8)、正则表达式匹配的注意事项、匹配示例以及最佳实践。Java中的多字节字符串匹配遵循Unicode规范和所使用的字符编码。正确理解这些概念对于确保程序精确匹配国际化文本数据至关重要。
Java如何多字节字符串的正则表达式匹配
2024-04-02

如何找出 Golang 正则表达式匹配的第一个子字符串?

findstringsubmatch 函数可找出正则表达式匹配的第一个子字符串:该函数返回包含匹配子字符串的切片,第一个元素为整个匹配字符串,后续元素为各个子字符串。代码示例:regexp.findstringsubmatch(text,
如何找出 Golang 正则表达式匹配的第一个子字符串?
2024-05-13

如何使用Python中的正则表达式进行字符串匹配

如何使用Python中的正则表达式进行字符串匹配正则表达式是一种强大的字符串模式匹配工具,它能够在文本中查找特定的模式,使程序能够更快速、更灵活地处理字符串。在Python中,我们可以使用re模块来操作正则表达式。本文将介绍如何使用Pyth
2023-10-22

如何进行正则表达式匹配字符串的实现

如何进行正则表达式匹配字符串的实现,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。使用正则表达式最常用的是考虑实现正则表达式匹配的判断,在实际工作中经常会遇到什么
2023-06-17

java正则表达式匹配字符串的方法是什么

在Java中,我们可以使用正则表达式来匹配字符串,可以使用以下步骤实现:1. 导入`java.util.regex`包,该包包含了用于操作正则表达式的类。2. 使用`Pattern.compile()`方法创建一个正则表达式的模式对象。例如
2023-08-09

C#中如何使用正则表达式和字符串匹配

C#中如何使用正则表达式和字符串匹配正则表达式是一种强大的文本处理工具,它可以帮助我们有效地在字符串中进行模式匹配和提取。在C#中,通过使用System.Text.RegularExpressions命名空间下的Regex类,我们可以轻松地
2023-10-22

java怎么用正则表达式匹配与提取字符串

本文小编为大家详细介绍“java怎么用正则表达式匹配与提取字符串”,内容详细,步骤清晰,细节处理妥当,希望这篇“java怎么用正则表达式匹配与提取字符串”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。首先给出一个匹
2023-07-02

正则表达式怎么匹配多个字符

正则表达式可以使用特殊符号来匹配多个字符:1. 使用重复符号:可以使用`*`来匹配零个或多个字符,使用`+`来匹配一个或多个字符,使用`?`来匹配零个或一个字符。例如,正则表达式`ab*c`可以匹配字符串"ac"、"abc"、"abbc"等
2023-08-11

正则表达式匹配不包含某些字符串的技巧

正则表达式提供了一些技巧来匹配不包含某些字符串的情况。下面是一些常用的技巧:1. 使用否定预查:否定预查通过在匹配的字符串前面加上`(?!)`来实现。例如,正则表达式`(?!.+abc)`可以匹配不包含"abc"的字符串。2. 使用否定字符
2023-08-09

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录