任务描述
本关任务:编写代码,匹配相应的内容。
相关知识
为了完成本关任务,你需要掌握:
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' ',text))
#3.用‘-’代替句子中的空格
print(re.sub(r' ','-',text))
#4.用‘-’代替句子中的空格,并返回替换次数
print(re.subn(' ','-',text))
#********** End **********#