Python正则表达式和元字符详解

作者:清洁工老板 时间:2021-02-26 02:54:19 

正则表达式

正则表达式是一种强大的字符串操作工具。它是一种领域特定语言 (DSL),不管是 Python 还是在大多数现代编程语言中都是作为库存在。

它们主要面向两种任务:

- 验证字符串是否与模式匹配 (例如,字符串具有电子邮件地址的格式)。
- 在字符串中执行替换(例如将所有大写字母改成小写字母)。

特定于领域的语言是高度专业化的迷你编程语言。

正则表达式是一个例子,SQL(用于数据库操作)是另一个例子。

私有领域特定语言通常用于特定的工业目的。

Python 的正则表达式可以使用 re 模块访问,re 模块是标准库的一部分。

当你定义一个正则表达式,可以使用 re.match 函数用于确定是否匹配字符串的开始部分。如果匹配则 match 函数返回表示匹配的对象,如果不匹配则返回 None。

为了避免在处理正则表达式时出现混淆,我们将 r 添加到字符串前缀。该字符串不需要转义任何东西,使得正则表达式的使用变得更容易。


from re import match
msg = r"super"
if match(msg,"superman!"):
print("You are True")
else:
print("Occur an error! Foolish...")

运行结果:

>>>
You are True
>>>

上面的例子检查模式 super 是否匹配字符串,如果匹配,则打印 You are True。

这里的模式是一种简单的单词,但是有些字符串,在正则表达式中使用它们时会有特殊的意义。

匹配模式的其他函数有 re.match re.findall

re.match 在字符串中找到匹配。
re.findall 返回一个包含匹配的列表。


import re
string = "Hello python!Hello python!Hello python!"
pattern = r".python."
print(re.match(pattern,string))
print(re.findall(pattern,string))

运行结果:

>>>
None
[' python!', ' python!', ' python!']
>>>

从上面的示例中,我们可以得出:

match() 函数是从内容的第一个字符开始匹配,如果匹配不到,就得到None
findall() 函数从全部内容匹配,如果有多个,找出所有匹配的

函数 re.finditer 执行与 re.findall 相同的操作,但它返回一个迭代器,而不是一个列表。

正则表达式的 search 函数返回一个对象,包含几个更详细的信息。

此方法包括返回字符串匹配的值,返回第一次匹配的开始和结束位置,以及以元组形式返回第一个匹配的开始和结束位置的 span 函数。


import re
string = "Hello python!Hello python!Hello python!"
pattern = r".python."
match = re.search(pattern,string)
if match:
print(match.group())
print(match.start())
print(match.end())
print(match.span())

运行结果:

>>>
python!
5
13
(5, 13)
>>>

查找和替换

sub 是正则表达式里非常重要的函数。表达式:


re.sub(pattern, repl, string, count=0, flags=0)

pattern:表示正则表达式中的模式字符串;
repl:被替换的字符串(既可以是字符串,也可以是函数);
string:要被处理的,要被替换的字符串;
count:匹配的次数, 默认是全部替换
flags:具体用处不详


import re
string = "Hello python!Hello python!Hello python!"
pattern = r"python"
newstr = re.sub(pattern,"Java",string)
print(newstr)

运行结果:

>>>
Hello Java!Hello Java!Hello Java!
>>>

元字符

元字符使正则表达式比普通字符串方法更强大。它们允许您创建正则表达式来表示诸如一个或多个数字的匹配。
如果要创建与元字符 (如 $) 匹配的正则表达式,元字符的存在就会产生问题。您可以通过在元字符前面添加反斜杠来转义元字符。

但是这可能会导致问题,因为反斜杠在普通 Python 字符串中也有转义函数。这可能意味着可能将三个或四个反斜杠排成一行来执行所有转义操作。

为了避免这种情况,您可以使用一个原始字符串,它是一个普通字符串,前面有一个 "r" 前缀。

元字符点,用来表示匹配除了换行外的任何字符。


import re
string1 = "Hello python!Hello python!Hello python!"
string2 = "pythan,1234587pythoi"
string3 = r"hello"
pattern = r"pyth.n"
match1 = re.search(pattern,string1)
match2 = re.search(pattern,string2)
match3 = re.search(pattern,string3)
if match1:
print(match1.group())
print("match 1")
if match2:
print(match1.group())
print("match 2")
if match3:
print(match3.group())
print("match 3")

运行结果:

>>>
python
match 1
python
match 2
>>>

^ 表示匹配开始,$ 表示匹配结束。


import re
string1="python"
string2="pythan,1234587pythoi"
string3="hello"
pattern=r"^pyth.n$"
match1 = re.search(pattern,string1)
match2 = re.search(pattern,string2)
match3 = re.search(pattern,string3)
if match1:
print(match1.group())
print("match 1")
if match2:
print(match1.group())
print("match 2")
if match3:
print(match3.group())
print("match 3")

运行结果:

>>>
python
match 1
>>>

匹配模式 "^pyth.n$" 意味着字符串应该以 pyth 开头,然后是一个除换行符以外的任何字符,并以 n 结尾。

总结

以上所述是小编给大家介绍的Python正则表达式和元字符网站的支持!

来源:http://www.cnblogs.com/dustman/p/10027947.html

标签:python,正则表达式,元字符
0
投稿

猜你喜欢

  • 在CentOS上MySQL数据库服务器配置方法

    2024-01-19 07:01:21
  • Python实现带图形界面的炸金花游戏(升级版)

    2023-06-27 08:35:20
  • python 多态 协议 鸭子类型详解

    2023-10-03 11:53:00
  • django的auth认证,authenticate和装饰器功能详解

    2021-10-06 00:34:51
  • Go语言通过WaitGroup实现控制并发的示例详解

    2023-06-29 01:04:27
  • mysql千万级数据量根据索引优化查询速度的实现

    2024-01-21 19:16:31
  • 谈一谈JS消息机制和事件机制的理解

    2024-05-03 15:59:22
  • python如何将图片转换素描画

    2022-05-26 23:17:49
  • Python中移除List重复项的五种方法

    2021-12-11 20:15:38
  • python list删除元素时要注意的坑点分享

    2021-07-15 16:02:22
  • 一篇文章读懂Golang init函数执行顺序

    2024-04-27 15:40:37
  • python绘制圆柱体的方法

    2022-07-31 02:00:31
  • Python 导入文件过程图解

    2021-06-04 12:31:34
  • 详解tensorflow载入数据的三种方式

    2023-07-22 19:35:56
  • 在python tkinter界面中添加按钮的实例

    2023-06-03 08:30:41
  • sql2008 还原数据库解决方案

    2024-01-26 07:16:59
  • Mysql双主搭建的方法步骤

    2024-01-29 05:57:50
  • windows 10下安装搭建django1.10.3和Apache2.4的方法

    2022-01-01 01:07:51
  • anaconda创建、查看、激活与删除虚拟环境指令总结

    2023-04-09 13:01:23
  • js 实现拖拽排序详情

    2024-06-07 15:24:23
  • asp之家 网络编程 m.aspxhome.com