Python正则表达式入门用法(下)

发布于:2024-07-05 ⋅ 阅读:(11) ⋅ 点赞:(0)

Python的正则表达式模块是re。要使用它,需要先导入re模块。下面是一些常用的正则表达式操作:

  1. re.match(pattern, string): 从字符串的开始位置匹配一个模式,并返回匹配对象。如果匹配成功,则返回匹配对象;如果匹配失败,则返回None。

  2. re.search(pattern, string): 在字符串中搜索匹配模式的第一个位置,并返回匹配对象。如果匹配成功,则返回匹配对象;如果匹配失败,则返回None。

  3. re.findall(pattern, string): 在字符串中搜索匹配模式的所有位置,并返回一个列表。列表中的每个元素都是一个匹配对象。

  4. re.sub(pattern, repl, string): 将字符串中匹配模式的部分替换为指定的字符串,并返回替换后的字符串。

  5. re.split(pattern, string): 根据匹配模式分割字符串,并返回一个列表。

下面是一些常用的正则表达式元字符和修饰符:

  1. 元字符:

    • . : 匹配除换行符之外的任意字符。
    • \d : 匹配任意数字。
    • \D : 匹配任意非数字。
    • \w : 匹配任意字母、数字和下划线。
    • \W : 匹配任意非字母、数字和下划线。
    • \s : 匹配任意空白字符,包括空格、制表符、换行符等。
    • \S : 匹配任意非空白字符。
    • \b : 匹配一个单词边界,即单词和非单词之间的位置。
    • \B : 匹配一个非单词边界。
  2. 修饰符:

    • re.I : 忽略大小写匹配。
    • re.M : 多行匹配,^和$可以匹配每一行的开始和结束。
    • re.S : 单行匹配,.可以匹配换行符。

除了以上介绍的常用操作、元字符和修饰符,还有更多的正则表达式操作和特殊字符可以在Python的re模块中使用。

判断以某个内容为开始,某个内容为结束的字符串

例如:

# coding=utf-8

import re

input_str = input()

a = re.search(r'^lxj', input_str)

if a is not None:
    print(a.span())
else:
    print(a)

b = re.search(r'lxj$', input_str)

if b is not None:
    print(b.span())
else:
    print(b)

在Python的正则表达式中,有几个通配符可以用来匹配不同类型的字符。

  1. "."(句点):匹配任意单个字符,除了换行符(\n)以外的任何字符。

例如,正则表达式"a.b"可以匹配"acb"、"axb"、"a6b"等。

  1. "*"(星号):匹配前面的字符零次或多次。

例如,正则表达式"ab*c"可以匹配"ac"、"abc"、"abbc"、"abbbc"等。

  1. "+"(加号):匹配前面的字符至少一次或多次。

例如,正则表达式"ab+c"可以匹配"abc"、"abbc"、"abbbc"等,但不能匹配"ac"。

  1. "?"(问号):匹配前面的字符零次或一次。

例如,正则表达式"ab?c"可以匹配"ac"、"abc",但不能匹配"abbc"。

这些通配符可以与其他正则表达式元字符和字符类一起使用,以匹配更复杂的模式。

例如:

# coding=utf-8

import re

input_str = input()

a = re.findall(r'.ython', input_str)

print(a)
# coding=utf-8

import re

input_str = input()

# 编写获取she或者he的字符串,并存储到变量a中
a = re.findall(r's?he', input_str)


print(a)

重复次数
在正则表达式中,我们可以使用 `{N}` 来表示一个字符组连续匹配 N 次。例如:

import re

a = re.findall(r'[\d]{4}-[\d]{7}', '张三:0731-8825951,李四:0733-8794561')
print(a)

输出为:


['0731-8825951', '0733-8794561']
 

重复区间
有时候,我们不知道具体匹配字符组要重复的次数,可以使用 `{M,N}` 来表示重复的区间,其中 M 是下界,N 是上界。例如:

import re

a = re.search(r'[\d]{3,4}', '0731')
b = re.search(r'[\d]{3,4}', '073')
print(a)
print(b)

执行结果输出如下:


<re.Match object; span=(0, 4), match='0731'>
<re.Match object; span=(0, 3), match='073'>
 

非贪婪模式
默认情况下,正则表达式是贪婪模式,即尽可能多地匹配字符。要使用非贪婪模式,可以在表达式后面加上 `?`。例如:

import re

a = re.search(r'[\d]{3,4}?', '0731')
b = re.search(r'[\d]{3,4}?', '073')
print(a)
print(b)

执行结果输出如下:
<re.Match object; span=(0, 3), match='073'>
<re.Match object; span=(0, 3), match='073'>
 

# coding=utf-8

import re

input_str = input()
# 1、基于贪心模式匹配字符串中重复出现2个数字的子字符串,并存储到变量a。

a = re.findall(r'[\d]{2}', input_str)

print(a)

# 2、基于贪心模式匹配字符串中重复出现4-7个数字的子字符串,并存储到变量b。

b = re.findall(r'[\d]{4,7}', input_str)

print(b)

在正则表达式中,我们经常会遇到需要匹配一个或多个重复的字符的情况。为了简化这种常见需求,正则表达式提供了两个特殊的符号:

  * `+`:表示匹配一次或多次重复的字符。例如,`[\d]+` 可以匹配一个或多个数字字符。
  * `*`:表示匹配零次或多次重复的字符。例如,`[\d]*` 可以匹配零个或多个数字字符。

使用这两个符号来匹配字符串中的连续数字,例如:

import re

# 使用 + 符号匹配至少一个数字
a = re.findall(r'\d+', '0731-8859456')
print(a)  # 输出: ['0731', '8859456']

# 使用 * 符号匹配零个或多个数字
b = re.findall(r'\d*', '0731-8859456')
print(b)  # 输出: ['0731', '8859456']

在这个例子中,我们使用了 `re.findall()` 函数来查找所有匹配的数字序列。通过使用 `+` 和 `*` 符号,我们可以更简洁地表示匹配一个或多个数字的需求。

# coding=utf-8

import re

input_str = input()
# 1、基于贪心模式匹配字符串中连续出现5个数字以上的子字符串,并存储到变量a。
a = re.findall(r'[\d]{5,}', input_str)

print(a)

# 2、匹配字符串中都为数字的子字符串,并存储到变量b。
b = re.findall(r'[\d]+[0-9]', input_str)

print(b)


网站公告

今日签到

点亮在社区的每一天
去签到