今天以我写过的《Python 60天》专栏中的一段文字,提取出里面的链接为例,阐述提取子串的实用性。
先贴上文字(有删减改动),将这段文字赋值给变量 urls
:
urls = """
基于 Python 的包更是枝繁叶茂,遍地开花,“Tiobe 编程语言排行榜”最新统计显示 Python 是增长最快的语言。
![image-20200131192231967](https://images.gitbook.cn/2020-02-05-014719.png)
接下来,与大家,还有远在美国做 AI 博士后研究的 Alicia,一起开始我们的 60 天 Python 探索之旅吧。
所有的这些考虑,都是为了让大家在短时间内掌握 Python 技术栈,多一个生存的本领。拿到理想的 Offer 后,早日过上自己想要的生活。
让我们开始吧。
如下,按照是否为静态/动态语言,弱类型/强类型两个维度,
总结常用的语言分类。
![image-20200205155429583](https://images.gitbook.cn/2020-02-05-080211.png) ### 四大基本语法
"""
你可能很快写出如下的正则表达式:
# 元字符.表示匹配除\n字符外的任意一个字符
# 元字符*表示匹配前面一个原子0次或多次
pat = r'https:.*'
然后导入re
模块,使用findall
方法找出所有匹配:
import re
result = re.findall(pat,urls)
print(result)
运行结果显示如下,观察发现2个匹配,但是每个匹配链接都包括冗余字符,因此匹配错误:
['https://images.gitbook.cn
/2020-02-05-014719.png)',
'https://images.gitbook.cn
/2020-02-05-080211.png) ### 四大基本语法']
我们再稍微优化原正则表达式为:
# 添加 \) 表示待匹配子串以右括号结尾
pat = r'https:.*\)'
打印结果显示如下,结果确实好一点,但是依然包括右括号,结果还是错误的:
['https://images.gitbook.cn/
2020-02-05-014719.png)',
'https://images.gitbook.cn/
2020-02-05-080211.png)']
所以掌握提取子串的技能就很重要,实现提取子串也很简单,只需把想要返回的子串加上一对括号就行,如下所示:
# 把想要返回的子串外面添加一对括号
pat = r'(https:.*)\)'
此时返回结果完全正确,无任何多余字符。想要返回的子串外面添加一对括号还有个专业叫法:捕获或分组。
[上一个例子](94.md) [下一个例子](96.md)