目录
任务描述
本关任务:编写代码,匹配相应的内容。
相关知识
为了完成本关任务,你需要掌握: 1.finditer()
函数; 2.split()
函数; 3.sub()
函数; 4.subn()
函数。
以下实例均可在命令行
窗口中练习。
finditer()函数
搜索字符串,返回一个Match
对象的迭代器(包含匹配的开始和结束的位置,如下图中的i
所示)。找到正则匹配的所有子串,把它们作为一个迭代器返回。
格式:re.finditer(pattern, string, flags=0)
;
itext = re.finditer(r'\d+','12 edueduedu44coder deducoder, 11skdh ds 12') #匹配所有的数字
for i in itext:
print(i)
print(i.group())
print(i.span()) #span()返回一个元组包含匹配 (开始,结束) 的位置
运行结果如下:
split()函数
按照能够匹配的子串,将string
分割后返回列表。
格式:re.split(pattern, string)
;
可以使用re.split
来分割字符串,如:re.split(r'\s+', text)
将字符串,按空格分割成一个单词列表。
以数字为分割符,将字符串分割:
print(re.split(r'\d+','asas2kdjs4jds5djdfj1djf0'))
运行结果如下:
sub()函数
使用re
替换string
中每一个匹配的子串后,返回替换后的字符串。
格式:re.sub(pattern, repl, string, count)
;
用-
替代,
如下:
import re
text = "aaa,bbb,ccc,ddd"
print(re.sub(r',', '-', text))
运行结果如下:
subn()函数
返回替换次数。
格式:subn(pattern, repl, string, count=0, flags=0)
; 解释:用A
替换123
中的1
,结果为A23
,repl
就是指的A
。
把所有的数字替换为A
:
print(re.subn('\d','A','1asd2dkjf34'))
运行结果如下:
subn()
不仅返回了替换后的字符串,还返回了替换的次数。
编程要求
根据提示,补全右侧编辑器中 Begin 至 End 区间的代码,实现以下功能:
- 匹配测试输入的字符串
text
中以t
开头的所有单词并显示; - 用空格分割句子;
- 用
-
代替句子中的空格; - 用
-
代替句子中的空格,并返回替换次数。
测试说明
平台会对你编写的代码进行测试:
平台测试输入:
The moment you think about giving up,think of the reason why you held on so long.`
预期输出:
think
think
the
['The', 'moment', 'you', 'think', 'about', 'giving', 'up,', 'think', 'of', 'the', 'reason', 'why', 'you', 'held', 'on', 'so', 'long.']
The-moment-you-think-about-giving-up,-think-of-the-reason-why-you-held-on-so-long.
('The-moment-you-think-about-giving-up,-think-of-the-reason-why-you-held-on-so-long.', 16)
开始你的任务吧,祝你成功!
import re
text = input()
#********** Begin *********#
#1.匹配以t开头的所有单词并显示
itext = re.finditer(r'\bt\w*',text)
for i in itext:
print(i.group())
#2.用空格分割句子
print(re.split(r'\s',text))
#3.用‘-’代替句子中的空格
print(re.sub(r'\s',r'-',text))
#4.用‘-’代替句子中的空格,并返回替换次数
print(re.subn(r'\s',r'-',text))
#********** End **********#