正则表达式
正则表达式(Regular Expression)是一个强大的文本匹配工具,让我们可以定义一个模式,用来描述一系列符合某种规则的字符串。
如果你想实现以下功能,就需要正则表达式:
- 验证一个字符串是否符合某个格式
- 在文本中查找符合某个规则的字符串
- 将文本中满足某个规则的字符串替换成新的字符串
本篇文章将向你介绍如何使用正则表达式,包括正则表达式的基本知识、如何使用正则表达式进行匹配,以及一些实例应用。
基础知识
你肯定已经熟悉了一些常见的正则表达式符号:
.
:匹配任意字符|
:或[]
:方括号内的任意字符()
:分组*
:匹配前一个字符0到多次+
:匹配前一个字符1到多次?
:匹配前一个字符0或1次{ n }
:匹配前一个字符n次{ n ,}
:匹配前一个字符n次以上{ n , m }
:匹配前一个字符n到m次
下面我们来看几个例子:
匹配任意字符:
/h.t/ 匹配 "hat" "hot" "hit" 等任意字符
或:
/hat|hot/ 匹配 "hat" 或者 "hot"
方括号内的任意字符:
/[aeiou]/ 匹配任何一个元音字母
分组:
/(ab)+/ 匹配 "ab" "abab" "ababab" 等任何多个"ab"组合起来的部分
匹配前一个字符0到多次:
/a*/ 匹配 "aa" "aaa" "aaaa" 等任意数量的"a"
匹配前一个字符1到多次:
/a+/ 匹配 "aa" "aaa" "aaaa" 等至少含有一个"a"的字符串
匹配前一个字符0或1次:
/a?/ 匹配 "a" 或者 ""
匹配前一个字符n次:
/a{3}/ 匹配 "aaa"
匹配前一个字符n次以上:
/a{3,}/ 匹配 "aaa" "aaaa" "aaaaa" 等至少连续三个"a"的字符串
匹配前一个字符n到m次:
/a{3,5}/ 匹配 "aaa" "aaaa" "aaaaa" ,但不包括 "aa"、"aaaaaa"等
匹配
正则表达式的优点在于它可以进行强大的字符串匹配,使用正则表达式进行匹配的语言或工具包括但不限于Python、Java和JavaScript等。
下面我们来看两个例子,我们将用Python语言进行正则表达式匹配。
匹配email地址
import re
pattern = r'\w+@\w+\.\w+'
email = 'example@gmail.com'
if re.match(pattern, email):
print("匹配成功")
else:
print("匹配失败")
在以上代码中,我们定义了一个常见的email匹配正则表达式,使用Python的re
模块的match
函数,将要匹配的字符串email
和正则表达式pattern
作为参数传入,便可判断字符串是否符合该正则表达式。如果匹配成功,输出"匹配成功"
,否则输出"匹配失败"
。
上述正则表达式的解释是:\w+
表示匹配任意连续的字母和数字(即单词字符),@
表示字面匹配@
,\w+
表示匹配任意连续的字母和数字,\.
则表示匹配字面上的.
,\w+
表示匹配任意连续的字母和数字。
匹配电话号码
import re
pattern = r'\d{3}-\d{8}|\d{4}-\d{7}'
tel_num = '010-12345678'
if re.match(pattern, tel_num):
print("匹配成功")
else:
print("匹配失败")
以上代码以Python语言为例,用正则表达式匹配电话号码。该正则表达式包含两个子表达式,用|
(或)连接。第一个子表达式d{3}-d{8}
表示匹配以3个数字为开头,接着是一个短横线,后面有8个数字,共11个字符;第二个子表达式\d{4}-\d{7}
表示匹配以4个数字为开头,接着是一个短横线,后面有7个数字,共11个字符。这便可以匹配国内固定电话号码。若匹配成功,则输出"匹配成功"
。
替换
正则表达式除了用于匹配字符串外,还可以用于替换字符串。
使用Python语言,下面我们给出一个将以空格为间隔符的日期格式”xxxx-xx-xx”转换成中文格式”xxxx年xx月xx日”示例:
import re
pattern = r'(\d{4})-(\d{2})-(\d{2})'
date_str = '2022-03-01'
new_date_str = re.sub(pattern, r'\1年\2月\3日', date_str)
print(new_date_str)
以上代码中,我们首先定义了一个正则表达式pattern
,通过正则表达式来匹配日期格式。接着使用re.sub()
函数,将匹配到的日期格式替换成中文格式,然后将结果存储在new_date_str
变量中。最后输出新的日期字符串。
在上述代码中,r'\1年\2月\3日'
表示一个新的字符串,其中\1
表示匹配到的第1个子串,即年份;\2
表示匹配到的第2个子串,即月份;\3
表示匹配到的第3个子串,即日期。在新的字符串中,用中文表示了日期,并且用\1
、\2
、\3
分别代表年、月、日。
结论
正则表达式是一个强大的文本匹配工具,用于验证格式、查找符合规则的字符串和替换字符串。本文介绍了正则表达式的基本知识以及如何在Python语言中使用它进行匹配和替换,希望本篇文章能对你有所帮助。