正则表达式简介及应用示例
摘要:正则表达式(regular expression)是使用单个字符串来描述、匹配一系列符合某种句法规则的字符串。本文将简要介绍正则表达式的应用环境、语法并展示应用示例。
前言
正则表达式是什么
本文将简要介绍正则表达式的应用环境、语法并展示应用示例。
一 正则表达式的应用环境
正则表达式在多数编程语言中都有部署(例如C#、Perl、PHP、Python等等)、在各种数据库软件中(例如 Oracle、MySQL等等)一般由类似regexp_like/REGEXP的函数支持、在Office及一些文本编辑器中(例如Notepad++、UltraEditor等等)也有部署。下图显示的是在Notepad++中设定正则表达式并进行文本替换的方法。
不同编程语言及应用场景中正则表达式的写法大体思路一致,细节上可能存在差异,需结合场景调试。
二 正则表达式语法
正则表达式是由普通字符(例如字符 a 到 z、数字0-9等等)以及特殊字符(称为"元字符 meta character")组成的文字模式来描述在搜索文本时要匹配的一个或多个字符串。匹配字符串的过程从左至右进行。
绝大多数普通字符在匹配时就是匹配字符本身比如 'A', 'a', 或者 '0',都是最简单的正则表达式,也可以拼接普通字符,例如 last 匹配字符串 'last';特殊字符则包含特殊含义。常见的特殊字符有{}[]^$.|*+?以及\,其中\(反斜杠)提供转义功能。转义字符可帮助查询特殊字符本身,同时与bdswBDSWn等字母连用时也具有特殊含义。
特殊字符的描述请见下表:
特殊字符 |
描述 |
. |
点号匹配除了换行符的任意单个字符 |
[ ] |
匹配方括号内的任意字符,常见[0-9]匹配数字[a-z]匹配小写字母 |
[^ ] |
否定的字符种类。匹配除了方括号里的任意字符 |
* |
匹配>=0个重复的在*号之前的字符 |
+ |
匹配>=1个重复的在+号前的字符 |
? |
标记?之前的字符为可选. |
{n,m} |
匹配N至M个大括号之前的字符 |
| |
逻辑判断中的“或”运算符,匹配符号前或后的字符 |
\ |
转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ | |
^ |
从开始行开始匹配 |
$ |
从末端开始匹配 |
\b |
匹配一个单词边界,也就是指单词和空格间的位置 |
\B |
匹配非单词边界 |
\w |
匹配所有字母数字,等同于:[a-zA-Z0-9_] |
\W |
匹配所有非字母数字,即符号,等同于:[^\w] |
\d |
匹配数字,等同于:[0-9] |
\D |
匹配非数字,等同于:[^\d] |
\s |
匹配所有空格字符,等同于:[\t\n\f\r\p{Z}] |
\S |
匹配所有非空格字符,等同于:[^\s] |
\n |
匹配一个换行符 |
下图展示的一个基于上述特殊字符构造的一个正则表达式及其含义。可匹配基于Unicode编码的长度为5的中文字符串,例如“罗小黑战记”、“正则表达式”等等。
除上述特殊字符支持的功能外正则表达式还提供分组、零宽断言等诸多功能,这里不做过多展开,在示例中会稍作展示。
三 正则表达式应用
本文中的应用示例是以Python展示, Python中re 模块拥有全部的正则表达式功能,使用前用import re进行调用。示例中会使用到re.search及re.findall两个函数:
re.search(pattern,string)会扫描整个string查找匹配,会扫描整个字符串并返回第一个成功的匹配。当不需要获取全部结果,只需检测是否有符合条件的字符串时,使用re.search可以较快得到结果; re.findall(pattern,string)将返回一个所匹配的字符串的字符串列表。
以下为一些正则表达式的应用示例:
例1:在进行文本匹配时,很多时候我们并不清楚可以匹配的结果是什么样的字符,可能是数字、英文、中文等等。特殊字符. 是正则表达式中非常常用的一个字符,可以完成这种模糊匹配的需求,用来替代除了换行符外的任意字符。一个.代表一个字符,可多个连用,'.....'表示五个字符。此例中展示了如何使用.进行任意字符串匹配并输出匹配结果。
参考资料:
(1)余晟 著. 正则指引(第2版),电子工业出版社,2018.(ISBN: 9787121351303)
(2) https://docs.python.org/zh-cn/3/library/re.html
(3)https://github.com/ziishaned/learn-regex
(4) https://tool.oschina.net/uploads/apidocs/jquery/regexp.html
(5)https://www.runoob.com/python/python-reg-expressions.html
长按二维码即可关注!也请随手推荐我们给你的小伙伴 ↓↓↓↓