正常情形下
可以利用相等 (==) 运算符测试两个字符串是否相等。可以利用 in 运算符或内置字符串方法和 来测试一个字符串是否是另一个字符串的子字符串。.find().index()但是想判断一个字符串是否为邮箱格式,手机格式袁莉其他自己哀求的格式时,这种==in就涜不能知足哀求了,它是一个格式定义,但是格式中的内容要知足一定哀求。
正则表达式是一种用于匹配和操作文本的强大工具,它是由一系列字符和分外字符组成的模式,用于描述要匹配的文本模式。
正则表达式可以在文本中查找、更换、提取和验证特定的模式。
正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和分外字符(称为"元字符"),是打算机科学的一个观点。正则表达式利用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,常日被用来检索、更换那些符合某个模式(规则)的文本。
许多程序设计措辞都支持利用正则表达式进行字符串操作。
例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个观点最初是由Unix中的工具软件(例如sed和grep)遍及开来的,
后来在广泛利用于Scala 、PHP、C# 、Java、C++ 、Objective-c、Perl 、Swift、VBScript 、Javascript、Ruby 以及Python等等。
正则表达式常日缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
正则表达式在Python中的表示在Python中须要通过正则表达式对字符串进⾏匹配的时候,可以使⽤⼀个python自带的模块,名字为re。
正则表达式的大致匹配过程是:
1.依次拿出表达式和文本中的字符比较,2.如果每一个字符都能匹配,则匹配成功;一旦有匹配不堪利的字符则匹配失落败。3.如果表达式中有量词或边界,这个过程会轻微有一些不同。 正则表达式办理的问题:字符串模糊匹配大略的例子正则表达式是一个分外的字符序列,用于定义繁芜字符串匹配功能的模式
要判断一个字符串中包含123这几个值是地可以有如下的写法
写法 1
>>> s = 39;foo123bar'>>> '123' in sTrue
写法2
>>> s = 'foo123bar'>>> s.find('123')3>>> s.index('123')3
模块re:办理繁芜的问题假设您要确定字符串是否包含任何三个连续的十进制数字字符,而不是搜索像 这样的固定子字符串,如字符串 '123''foo123bar''foo456bar''234baz''qux678'
紧张关注一个函数 .re.search()
re.search(<regex>, <string>)
import rere.search(...)
还刚才 查找123的例子,利用正则表达式如何实现
>>> s = 'foo123bar' 2 3>>> # One last reminder to import! 4>>> import re 5 6>>> re.search('123', s) 7<_sre.SRE_Match object; span=(3, 6), match='123'>
>>> if re.search('123', s):... print('Found a match.')... else:... print('No match.')...Found a match.
<_sre.SRE_Match object; span=(3, 6), match='123'>span=(3, 6)指示找到匹配项的部分。这与切片表示法中的含义相同:<string>这个时候正则表达式已经见告你了查找到的字符串在哪里
>>> s[3:6]'123'
正则表达式分外符号元字符
解释
.
代表任意字符
\
[ ]
匹配内部的任一字符或子表达式
[^]
对字符集和取非
-
定义一个区间
\
对下一字符取非(常日是普通变分外,分外变普通)
匹配前面的字符或者子表达式0次或多次
?
惰性匹配上一个
+
匹配前一个字符或子表达式一次或多次
+?
惰性匹配上一个
?
匹配前一个字符或子表达式0次或1次重复
{n}
匹配前一个字符或子表达式
{m,n}
匹配前一个字符或子表达式至少m次至多n次
{n,}
匹配前一个字符或者子表达式至少n次
{n,}?
前一个的惰性匹配
^
匹配字符串的开头
\A
匹配字符串开头
$
匹配字符串结束
[\b]
退格字符
\c
匹配一个掌握字符
\d
匹配任意数字
\D
匹配数字以外的字符
\t
匹配制表符
\w
匹配任意数字字母下划线
\W
不匹配数字字母下划线
该当场景数字:^[0-9]$n位的数字:^\d{n}$至少n位的数字:^\d{n,}$m-n位的数字:^\d{m,n}$零和非零开头的数字:^(0|[1-9][0-9])$最大略的例子,手机号13位校验
\d表示数字{13}1 个数字
>>> import re>>> s ="^\d{13}$">>> re.search(s,"11111")>>> rs = re.search(s,"11111")>>> rs>>> re.search(s,"1234567890123")<re.Match object; span=(0, 13), match='1234567890123'> >>> re.search(s,"a234567890123")>>>
判断字符串中涌现紧挨着的三个数字
>>> s = 'foo123bar'>>> re.search('[0-9][0-9][0-9]', s)<_sre.SRE_Match object; span=(3, 6), match='123'>
[0-9][这个位置表示聘0-9中任意一个数字[0-9][0-9][0-9]表示涌现三个数字位置紧挨着你也可以换一种办法 [0-9]{3}:
[0-9]一个数字{3}:涌现三次
>>> s = 'foo123bar'>>> re.search('[0-9][0-9][0-9]', s)<re.Match object; span=(3, 6), match='123'>>>> re.search('[0-9]{3}', s)<re.Match object; span=(3, 6), match='123'>>>>
查找123涌如今字符串中 1.3实在代理的便是123
>>> s = 'foo123bar'>>> re.search('1.3', s)<_sre.SRE_Match object; span=(3, 6), match='123'>>>> s = 'foo13bar'>>> print(re.search('1.3', s))None
[] 与单个字符匹配的元字符
[a-z] 表示 a-z 26个小写字母中的个中一个[A-Z] 表示 A-Z 26个大写字母中的个中一个
>>> re.search('[a-z]', 'FOObar')<_sre.SRE_Match object; span=(3, 4), match='b'>
>>> re.search('[0-9][0-9]', 'foo123bar')<_sre.SRE_Match object; span=(3, 5), match='12'>
[0-9]匹配任意数字字符:[0-9a-fA-F]匹配任何十六进制数字字符:
>>> re.search('[0-9a-fA-f]', '--- a0 ---')<_sre.SRE_Match object; span=(4, 5), match='a'>
匹配任何不是数字的字符:^[^0-9]
>>> re.search('[^0-9]', '12345foo')<_sre.SRE_Match object; span=(5, 6), match='f'>
如果字符涌如今字符类中,但不是第一个字符,则它没有分外含义,并且与文本字符匹配:
>>> re.search('[#:^]', 'foo^bar:baz#qux')<_sre.SRE_Match object; span=(3, 4), match='^'>
间断性匹配例如座机号码有一个 -
>>> re.search('[-abc]', '123-456')<_sre.SRE_Match object; span=(3, 4), match='-'>>>> re.search('[abc-]', '123-456')<_sre.SRE_Match object; span=(3, 4), match='-'>>>> re.search('[ab\-c]', '123-456')<_sre.SRE_Match object; span=(3, 4), match='-'>
英文点 .英文的 . 字符匹配除换行符之外的任何单个字符:.
>>> re.search('foo.bar', 'fooxbar')<_sre.SRE_Match object; span=(0, 7), match='fooxbar'>>>> print(re.search('foo.bar', 'foobar'))None>>> print(re.search('foo.bar', 'foo\nbar'))None
\w \W\\w匹配任何字母数字单词字符。
单词字符是大写和小写字母、数字和下划线 () 字符,
因此实质上是:\w 等价于[a-zA-Z0-9_]:
\W是与\w相反
[^a-zA-Z0-9_]
>>> re.search('\W', 'a_13Qb')<_sre.SRE_Match object; span=(3, 4), match=''>>>> re.search('[^a-zA-Z0-9_]', 'a_13Qb')<_sre.SRE_Match object; span=(3, 4), match=''>
\d 匹配任何十进制数字字符 等价于 [0-9]
\D 匹配非数字 [^0-9]
>>> re.search('\d', 'abc4def')<_sre.SRE_Match object; span=(3, 4), match='4'>>>> re.search('\D', '234Q678')<_sre.SRE_Match object; span=(3, 4), match='Q'>
\s 匹配任何空格字符:
\S 是 的反义词。它匹配任何非空格字符:\s
>>> re.search('\s', 'foo\nbar baz')<_sre.SRE_Match object; span=(3, 4), match='\n'>
未完待续转义元字符
>>> re.search('\S', ' \n foo \n ')<_sre.SRE_Match object; span=(4, 5), match='f'>
下一篇文章先容
网络图片