正常情形下

可以利用相等 (==) 运算符测试两个字符串是否相等。
可以利用 in 运算符或内置字符串方法和 来测试一个字符串是否是另一个字符串的子字符串。
.find().index()

但是想判断一个字符串是否为邮箱格式,手机格式袁莉其他自己哀求的格式时,这种==in就涜不能知足哀求了,它是一个格式定义,但是格式中的内容要知足一定哀求。

正则表达式是一种用于匹配和操作文本的强大工具,它是由一系列字符和分外字符组成的模式,用于描述要匹配的文本模式。

php字符串模糊匹配Python正则表达式一字符串的隐约匹配 Angular

正则表达式可以在文本中查找、更换、提取和验证特定的模式。

正则表达式,又称规则表达式,(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 = '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'>

未完待续转义元字符

下一篇文章先容

网络图片