【头歌】正则表达式

Python使用正则表达式

目录

钳制芝士

返回顶部

使用 pattern 去匹配

re.match 尝试从字符串的起始位置匹配一个模式(是个元组)
re.search 扫描整个字符串并返回第一个成功的匹配的位置(是个元组)

他们有差不多相同的格式:

  • re.match(pattern, string, flags=0)
  • re.search(pattern, string, flags=0)

获取匹配表达式

  1. 在使用了search或者match之后,使用 group(num) 或 groups()

其中:

  • group() 可以输入多个组号
  • groups() 返回所有
  1. 使用find、find_all函数

这个东西和爬虫里面的内容有点像,但是返回的数据类型是不一样的。
它们返回的,应该是元组(未证实)。

检索和替换

re.sub用于替换字符串中的匹配

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

第1关:查找第一个匹配的字符串

返回顶部

解题思路

# coding=utf-8

# todo 在此导入python正则库
import re

check_name = input()
# todo 在此使用正则匹配'张明'的信息,结果存储到is_zhangming中

expr = re.compile(r'\b张明\b')
is_zhangming = re.search(expr,check_name)

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

第2关:基础正则表达式–字符组

返回顶部

编程要求

根据提示,在右侧编辑器 Begin-End 部分补充代码,具体任务如下:

从文本中快速匹配到 python 和 Python 的小程序,输出匹配到的所有内容。

测试说明

测试输入:

I LIKE Python3 and i like python2.7;

预期输出:

[Python, python]

解题思路

# coding=utf-8

import re

input_str = input()

# todo 编写获取python和Python的正则,并存储到 match_python 变量中

match_python = re.findall(r'python|Python',input_str)

print(match_python)

第3关:基础正则表达式–区间与区间取反

返回顶部

编程要求

请仔细阅读右侧代码,根据提示,在右侧编辑器 Begin-End 部分补充代码,具体任务如下:

  • 匹配数字字符信息;
  • 匹配不是数字字符的信息。

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

测试输入:Python3 and python2.7;
预期输出:

['3', '2', '7']
['P', 'y', 't', 'h', 'o', 'n', ' ', 'a', 'n', 'd', ' ', 'p', 'y', 't', 'h', 'o', 'n', '.']

解题思路

# coding=utf-8

import re

input_str = input()

# todo 1、编写获取到数字的正则,并输出匹配到的信息
mat = re.findall(r"\d",input_str)
print(mat)

# todo 2、编写获取到不是数字的正则,并输出匹配到的信息
mat = re.findall(r"[^\d]",input_str)
print(mat)

第4关:基础正则表达式–快捷方式

返回顶部

编程要求

请仔细阅读右侧代码,根据提示,在右侧编辑器 Begin-End 部分补充代码,具体任务如下:

  • 匹配单词字符,并输出;
  • 匹配不是单词的字符,并输出。

测试说明

测试输入:Python3 and python2.7
预期输出:

['P', 'y', 't', 'h', 'o', 'n', '3', 'a', 'n', 'd', 'p', 'y', 't', 'h', 'o', 'n', '2', '7']
[' ', ' ', '.']

解题思路

# coding=utf-8

import re

input_str = input()

# 1、编写获取到单词的正则,并输出匹配到的信息

s = re.findall(r"\w",input_str)
print(s)

# 2、编写获取到不是单词的正则,并输出匹配到的信息

s = re.findall(r"\W",input_str)
print(s)

第5关:字符串的开始与结束

返回顶部

编程要求

请仔细阅读右侧代码,根据提示,在右侧编辑器 Begin-End 部分补充代码,具体任务如下:

  • 匹配以 educoder 开头的字符串,并存储到变量 a;
  • 匹配以 educoder 结束的字符串,并存储到变量 b。

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

测试输入:educoder can help you
预期输出:

(0, 8)
 None

测试输入:i love educoder
预期输出:

None
(7, 15)

测试输入:you can make educoder better
预期输出:

None
None

解题思路

# coding=utf-8

import re
# 必须要记得这个引用模块
    #  a = search(r'^educoder',input_str)
    # NameError: name 'search' is not defined 

input_str = input()

# todo 1、编写获取到以educoder开头的正则,并存储到变量a
a = re.search(r'^educoder',input_str)

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


# todo 2、编写获取到以educoder结束的正则,并存储到变量b
b = re.search(r'educoder$',input_str)

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

第6关:任意字符

返回顶部

编程要求

请仔细阅读右侧代码,根据提示,在右侧编辑器 Begin-End 部分补充代码,具体任务如下:

  • 匹配出测试集中的包含 (任意字符)ython 的子字符串,并输出数组子字符串。

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

测试输入:2ython
预期输出:['2ython']

测试输入:ython
预期输出:[]

解题思路

# coding=utf-8

import re

input_str = input()

# todo: 编写获取(任意字符)+ython的字符串,并存储到变量a中

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

第7关:可选字符

返回顶部

编程要求

请仔细阅读右侧代码,根据提示,在右侧编辑器 Begin-End 部分补充代码。具体任务如下:

  • 匹配出字符串中的 she 或者 he ,并输出匹配到的信息。

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

测试输入:she is
预期输出:she

测试输入:he;
预期输出:he

解题思路

# coding=utf-8

import re

input_str = input()

# 编写获取she或者he的字符串,并存储到变量a中
# a = re.findall(r'?he',input_str)
    # Traceback (most recent call last):
    #   File "step5/student_step_5.py", line 8, in <module>
    #     a = re.findall(r'?he',input_str)
    # sre_constants.error: nothing to repeat at position 0 

a = re.findall(r's?he',input_str)

print(a)

第8关:重复区间

返回顶部

编程要求

请仔细阅读右侧代码,根据提示,在右侧编辑器 Begin-End 部分补充代码。匹配并输出符合如下要求的字符串:

  1. 字符串中重复 2 个数字的子字符串;
  2. 重复 4-7 个数字组成的子字符串。

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

测试输入:张3:0731-8825951,李4:0733-8794561
预期输出:['0731', '8825951', '0733', '8794561']

解题思路

# 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。

# a = re.findall(r"\d{4,7}",input_str)
    # NameError: name 'b' is not defined 
b = re.findall(r"\d{4,7}",input_str)

print(b)

第9关:开闭区间与速写

返回顶部

编程要求

请仔细阅读右侧代码,根据提示,在右侧编辑器 Begin-End 部分补充代码,匹配并输出符合如下要求的字符串:

  • 重复数字 5 次及以上的子字符串;
  • 重复数字 1 次及以上的子字符串。

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

测试输入:0731-8859456
预期输出:

['8859456']
['0731', '8859456']

解题思路

# coding=utf-8

import re

input_str = input()
# todo 1、基于贪心模式匹配字符串中连续出现5个数字以上的子字符串,并存储到变量a。


a = re.findall(r"\d{5,}",input_str)
print(a)

# todo 2、匹配字符串中都为数字的子字符串,并存储到变量b。

# b = re.findall(r"\d*",input_str).remove("")
    # 这种写法就完全不行,不知道为什么
    # ouput:
        # None
    # 而这种方式就可以 
        # tmp = re.findall(r"\d*",input_str)
        # print(tmp)
        # while "" in tmp:
        #     tmp.remove("")
    # 这种就差一个
    # output ['123456', '789', '']
        # tmp = re.findall(r"\d*",input_str)
        # tmp.remove("")
    # 

b = re.findall(r"\d+",input_str)

print(b)
  • 18
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值