最近开始花时间系统学习正则表达式的知识。借此机会记录一下学习过程中的内容,希望对其他想了解相关内容的朋友有所帮助。正则表达式本身是独立于编程语言的知识,但又依赖于编程语言。基本上,我们使用的编程语言提供了它们的实现。当然,每个公司的实现方式也存在一些差异。有的支持的功能较多,有的支持的功能较少。由于我目前的工作是使用Python,所以下面的内容将使用Python代码来实现。因为正则表达式是实践中广泛使用的工具,所以我认为没有语言来学习它们是不可靠的。即使您不懂 Python 也没关系。我有计划将这个系列扩展到我熟悉的其他语言,但这条路必须一步一步走。我们先把Python的内容说完。
学习资料参考:
《正则表达式必知必会》
Python3正则表达式新手教程
Python正则表达式官方文档
简介:
这是第一本书。我个人强烈推荐它。这个系列的书都非常好。我建议学习时买一本作为枕边书。第二个新手教程是学习API的基本使用。第三个是Python官方文档中的正则表达式模块(提供了国际翻译,直接看英文就好了,比较原汁原味!)。
正则表达式主要API关系图
这张图是我个人的总结。我想我已经基本理清了函数之间的关系了。它们的功能是:
这里可以看到·re·下面紧接着有很多可以使用的函数,然后re.compile
下面也有很多同名的函数。 ·re·模块正下方是官方的功能,使用起来很方便。最正统的使用方式是通过re.compile
。 所以,接下来的内容我基本上都是用re.compile
以及下面的方法来实现。
重新编译
功能compile
函数用于编译正则表达式,生成正则表达式(Pattern)对象,用于match()
和search()
等函数。
语法:
re.compile(模式[,标志])
参数:
pattern:字符串形式的正则表达式
flags 可选,表示匹配模式,如忽略大小写、多行模式等。具体参数为:
re.我忽略大小写
re.L 多线模式
re.S 是 '.'
以及任何包含换行符的字符('.'
不包括换行符)
re.U 代表特殊字符集 \w、\W、\b、\B、\d、\D、\s、\S,依赖于 Unicode 字符属性数据库
re.X 为了提高可读性,请忽略“#”后面的空格和注释
示例:查找字符串中的所有数字
导入资源='runoob 123谷歌456'
结果1 = re.findall(r'\d+', s)图案= 重新.编译(r'\d+')# 查找数字
结果2 =图案.findall(s)
结果3 =图案.findall(s,0,20)打印 (结果1)
打印(结果2)
打印(结果3)"""
输出:
[‘123’,‘456’]
[‘123’,‘456’]
[‘123’,‘45’]
”“”
接下来我们将逐步学习正则表达式的内容,非常有趣!有趣又兴奋!
这是一个将一直使用的示例模板。这个模板是本篇博客中最重要的东西,后续的内容都会基于它来扩展。所以,请大家好好理解。
导入 re#需要搜索或匹配的文本
text = """我昨天和今天都爱你。"""#正则表达式regexp = r'love'#编译(编译正则表达式得到Pattern对象)
模式=重新.编译(regexp) #搜索
m =图案.搜索(文字)
if m:打印("匹配:", m )打印( " 匹配字符串: ", m.组()) print("匹配起始位置:" ,米.开始())打印("比赛结束位置:" , m.结束())打印() "元组匹配位置:" , m.跨度())
else:打印("不匹配!")#替换
new_text =图案.sub("讨厌", 文字)
打印(new_text)
注意:正则表达式regexp在开始之前将使用r
前缀。这样做的目的是为了避免在正则表达式中使用大量的转义字符,破坏整体的可读性。性别。
Python的正则表达式包含了很多非常好用的方法,这里就不过多介绍了。我们会一直使用上面的模式,因为那些简单易用的方法只是它的一种封装,学会使用这个基本方法自然会引出其他的方法。
匹配对象可以获得正则表达式的信息。它最重要的方法和属性是:
方法/属性 | 用途 |
---|---|
group() | 返回正则匹配字符串 |
start() | 返回匹配的起始位置 |
结束() | 返回匹配 |
span() | 的结束位置返回包含匹配(开始、结束)位置 |