前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >详尽解读正则表达式:python下的re方法

详尽解读正则表达式:python下的re方法

作者头像
学到老
发布于 2019-01-25 02:48:41
发布于 2019-01-25 02:48:41
2.1K00
代码可运行
举报
运行总次数:0
代码可运行

关于正则表达式

正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。

许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。

Python下的正则(regex)

可能对于Pythoner来说,一般提到正则就会马上想到re模块,其实我们通常处理正则都是处理字符串,字符串本身是有一些方法可以代替正则的,当然会在后面介绍re模块,首先我们来看看字符串的操作。

正则表达式处理字符串主要有四大功能

-1. 匹配 查看一个字符串是否符合正则表达式的语法,一般返回true或者false

-2. 获取 正则表达式来提取字符串中符合要求的文本

-3. 替换 查找字符串中符合正则表达式的文本,并用相应的字符串替换

-4. 分割 使用正则表达式对字符串进行分割。

1、字符串操作

1.1查找字符串

str.index 和str.find 功能相同,区别在于find()查找失败会返回-1,存在返回对应索引,不会影响程序运行。一般用find!=-1或者find>-1来作为判断条件。index()不存在会报错

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#str.index:检测字符串中是否包含子字符串str,可指定范围
a='zero one'
a.index("r") 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a.index('x')
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-3-51f0d5bb66b2> in <module>()
----> 1 a.index('x')
ValueError: substring not found
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a.find('r')
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#不存在返回-1
a.find('x')
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-1

1.2是否包含指定字符串

in |not in

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"zero" in a
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
True
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"123" not in a
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
True

1.3字符串的测试、判断函数,

字符串的测试、判断函数,这一类函数在string模块中没有,这些函数返回的都是bool值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"""
    S.startswith(prefix[,start[,end]]) #是否以prefix开头 
    S.endswith(suffix[,start[,end]]) #以suffix结尾 
    S.isalnum()    #是否全是字母和数字,并至少有一个字符 
    S.isalpha()    #是否全是字母,并至少有一个字符 
    S.isdigit()    #是否全是数字,并至少有一个字符 
    S.isspace()    #是否全是空白字符,并至少有一个字符 
    S.islower()    #S中的字母是否全是小写 
    S.isupper()    #S中的字母是否便是大写 
    S.istitle()    #S是否是首字母大写的
"""
a.startswith("z")
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
True

2. 正则表达式语法

2.1 字符与字符类

1 特殊字符:.^$?+*{}|

以上特殊字符要想使用字面值,必须使用\进行转义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用\.和\*。当然,要查找\本身,你也得用\\.

例如:deerchao.net匹配deerchao.net,C:\Windows匹配C:\Windows。

2 字符类

1. 包含在[]中的一个或者多个字符被称为字符类,字符类在匹配时如果没有指定量词则只会匹配其中的一个。

2. 字符类内可以指定范围,比如[a-zA-Z0-9]表示a到z,A到Z,0到9之间的任何一个字符

3. 左方括号后跟随一个,表示否定一个字符类,比如[0-9]表示可以匹配一个任意非数字的字符。

4. 字符类内部,除了\之外,其他特殊字符不再具备特殊意义,都表示字面值。放在第一个位置表示否定,放在其他位置表示本身,-放在中间表示范围,放在字符类中的第一个字符,则表示-本身。

5. 字符类内部可以使用速记法,比如\d \s \w

3 速记法

. 可以匹配除换行符之外的任何字符,如果有re.DOTALL标志,则匹配任意字符包括换行

\d 匹配一个Unicode数字,如果带re.ASCII,则匹配0-9

\D 匹配Unicode非数字

\s 匹配Unicode空白,如果带有re.ASCII,则匹配\t\n\r\f\v中的一个

\S 匹配Unicode非空白

\w 匹配Unicode单词字符,如果带有re.ascii,则匹配[a-zA-Z0-9_]中的一个

\W 匹配Unicode非单子字符

2.2 量词(匹配次数)

  1. ? 匹配前面的字符0次或1次
    • 匹配前面的字符0次或多次
    • 匹配前面的字符1次或者多次
  2. {m} 匹配前面表达式m次
  3. {m,} 匹配前面表达式至少m次
  4. {,n} 匹配前面的正则表达式最多n次
  5. {m,n} 匹配前面的正则表达式至少m次,最多n次

注意点:以上量词都是贪婪模式,会尽可能多的匹配,如果要改为非贪婪模式,通过在量词后面跟随一个?来实现,贪婪表示会尽可以多的匹配符合条件的字符,非贪婪则为尽可以少的匹配。

2.3分枝条件

表达式也能匹配010)12345678或(022-87654321这样的“不正确”的格式。要解决这个问题,我们需要用到分枝条件。正则表达式里的分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开。听不明白?没关系,看例子:

0\d{2}-\d{8}|0\d{3}-\d{7}这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。

(0\d{2})[- ]?\d{8}|0\d{2}[- ]?\d{8}这个表达式匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔。你可以试试用分枝条件把这个表达式扩展成也支持4位区号的。

\d{5}-\d{4}|\d{5}这个表达式用于匹配美国的邮政编码。美国邮编的规则是5位数字,或者用连字号间隔的9位数字。

之所以要给出这个例子是因为它能说明一个问题:使用分枝条件时,要注意各个条件的顺序。如果你把它改成\d{5}|\d{5}-\d{4}的话,那么就只会匹配5位的邮编(以及9位邮编的前5位)。原因是匹配分枝条件时,将会从左到右地测试每个条件,如果满足了某个分枝的话,就不会去再管其它的条件了。

2.4分组

我们已经提到了怎么重复单个字符(直接在字符后面加上限定符就行了);但如果想要重复多个字符又该怎么办?你可以用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了,你也可以对子表达式进行其它一些操作(后面会有介绍)。

(\d{1,3}.){3}\d{1,3}是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:\d{1,3}匹配1到3位的数字,(\d{1,3}.){3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(\d{1,3})。

不幸的是,它也将匹配256.300.888.999这种不可能存在的IP地址。如果能使用算术比较的话,或许能简单地解决这个问题,但是正则表达式中并不提供关于数学的任何功能,所以只能使用冗长的分组,选择,字符类来描述一个正确的IP地址:((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。

理解这个表达式的关键是理解2[0-4]\d|25[0-5]|[01]?\d\d?,这里我就不细说了,你自己应该能分析得出来它的意义。

小贴士: IP地址中每个数字都不能大于255. 经常有人问我, 01.02.03.04 这样前面带有0的数字, 是不是正确的IP地址呢? 答案是: 是的, IP 地址里的数字可以包含有前导 0 (leading zeroes).

2.5后向引用

使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。

后向引用用于重复搜索前面某个分组匹配的文本。例如,\1代表分组1匹配的文本。难以理解?请看示例:

\b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go, 或者kitty kitty。这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)。

你也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:(?\w+)(或者把尖括号换成’也行:(?‘Word’\w+)),这样就把\w+的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用\k,所以上一个例子也可以写成这样:\b(?\w+)\b\s+\k\b。

使用小括号的时候,还有很多特定用途的语法。下面列出了最常用的一些

小贴士: 组号分配还不像我刚说得那么简单:

分组0对应整个正则表达式 实际上组号分配过程是要从左向右扫描两遍的:第一遍只给未命名组分配,第二遍只给命名组分配--因此所有命名组的组号都大于未命名的组号 你可以使用(?:exp)这样的语法来剥夺一个分组对组号分配的参与权.

2.6零宽断言

接下来的四个用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。最好还是拿例子来说明吧:

(?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。比如\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I’m singing while you’re dancing.时,它会匹配sing和danc。

(?<=exp)也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp。比如(?<=\bre)\w+\b会匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading。

假如你想要给一个很长的数字中每三位间加一个逗号(当然是从右边加起了),你可以这样查找需要在前面和里面添加逗号的部分:((?<=\d)\d{3})+\b,用它对1234567890进行查找时结果是234567890。

下面这个例子同时使用了这两种断言:(?<=\s)\d+(?=\s)匹配以空白符间隔的数字(再次强调,不包括这些空白符)。

小贴士: 断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。

2.7 条件匹配

(?(id)yes_exp|no_exp):对应id的子表达式如果匹配到内容,则这里匹配yes_exp,否则匹配no_exp

2.8 正则表达式的标志

1. 正则表达式的标志有两种使用方法

1. 通过给compile方法传入标志参数,多个标志使用|分割的方法,如re.compile(r"#[\da-f]{6}\b", re.IGNORECASE|re.MULTILINE)

2. 通过在正则表达式前面添加(?标志)的方法给正则表达式添加标志,如(?ms)#[\da-z]{6}\b

2. 常用的标志

re.A或者re.ASCII, 使\b \B \s \S \w \W \d \D都假定字符串为假定字符串为ASCII

re.I或者re.IGNORECASE 使正则表达式忽略大小写 re.M或者re.MULTILINE 多行匹配,使每个^在每个回车后,每个$在每个回车前匹配

re.S或者re.DOTALL 使.能匹配任意字符,包括回车

re.X或者re.VERBOSE 这样可以在正则表达式跨越多行,也可以添加注释,但是空白需要使用\s或者[ ]来表示,因为默认的空白不再解释。如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    re.compile(r"""
          <img\s +)	#标签的开始
          [^>]*?	#不是src的属性
          src=	#src属性的开始
          (?:
          (?P<quote>["'])	#左引号
          (?P<image_name>[^\1>]+?)	#图片名字
          (?P=quote)	#右括号
          """,re.VERBOSE|re.IGNORECASE)

3.Python下的表达式

3.1Python中re模块使用正则表达式的两种方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. 使用re.compile(r, f)方法生成正则表达式对象,然后调用正则表达式对象的相应方法。好处》正则对象之后可以多次使用。

2. re模块中对正则表达式对象的每个对象方法都有一个对应的模块方法,唯一不同的是传入的第一个参数是正则表达式字符串。此种方法适合于只》使用一次的正则表达式。

3.2 正则表达式对象的常用方法

  1. rx.findall(s,start, end):

返回一个列表,如果正则表达式中没有分组,则列表中包含的是所有匹配的内容,

如果正则表达式中有分组,则列表中的每个元素是一个元组,元组中包含子分组中匹配到的内容,但是没有返回整个正则表达式匹配的内容 2. rx.finditer(s, start, end):

返回一个可迭代对象

对可迭代对象进行迭代,每一次返回一个匹配对象,可以调用匹配对象的group()方法查看指定组匹配到的内容,0表示整个正则表达式匹配到的内容 3. rx.search(s, start, end):

返回一个匹配对象,倘若没匹配到,就返回None

search方法只匹配一次就停止,不会继续往后匹配 4. rx.match(s, start, end):

如果正则表达式在字符串的起始处匹配,就返回一个匹配对象,否则返回None

re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。 5. rx.sub(x, s, m):

返回一个字符串。每一个匹配的地方用x进行替换,返回替换后的字符串,如果指定m,则最多替换m次。对于x可以使用/i或者/gid可以是组名或者编号来引用捕获到的内容。

模块方法re.sub(r, x, s, m)中的x可以使用一个函数。此时我们就可以对捕获到的内容推过这个函数进行处理后再替换匹配到的文本。 6. rx.subn(x, s, m):

与re.sub()方法相同,区别在于返回的是二元组,其中一项是结果字符串,一项是做替换的个数。 7. rx.split(s, m):分割字符串

返回一个列表

用正则表达式匹配到的内容对字符串进行分割

如果正则表达式中存在分组,则把分组匹配到的内容放在列表中每两个分割的中间作为列表的一部分,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  rx = re.compile(r"(\d)[a-z]+(\d)")
  s = "ab12dk3klj8jk9jks5"
  result = rx.split(s)

返回[‘ab1’, ‘2’, ‘3’, ‘klj’, ‘8’, ‘9’, ‘jks5’] 8. rx.flags():正则表达式编译时设置的标志

  1. rx.pattern():正则表达式编译时使用的字符串

3.3 匹配对象的属性与方法

  1. m.group(g, …) 返回编号或者组名匹配到的内容,默认或者0表示整个表达式匹配到的内容,如果指定多个,就返回一个元组
  2. m.groupdict(default) 返回一个字典。字典的键是所有命名的组的组名,值为命名组捕获到的内容 如果有default参数,则将其作为那些没有参与匹配的组的默认值。
  3. m.groups(default) 返回一个元组。包含所有捕获到内容的子分组,从1开始,如果指定了default值,则这个值作为那些没有捕获到内容的组的值
  4. m.lastgroup() 匹配到内容的编号最高的捕获组的名称,如果没有或者没有使用名称则返回None(不常用)
  5. m.lastindex() 匹配到内容的编号最高的捕获组的编号,如果没有就返回None。
  6. m.start(g): 当前匹配对象的子分组是从字符串的那个位置开始匹配的,如果当前组没有参与匹配就返回-1
  7. m.end(g) 当前匹配对象的子分组是从字符串的那个位置匹配结束的,如果当前组没有参与匹配就返回-1
  8. m.span() 返回一个二元组,内容分别是m.start(g)和m.end(g)的返回值
  9. m.re() 产生这一匹配对象的正则表达式
  10. m.string() 传递给match或者search用于匹配的字符串
  11. m.pos() 搜索的起始位置。即字符串的开头,或者start指定的位置(不常用)
  12. m.endpos() 搜索的结束位置。即字符串的末尾位置,或者end指定的位置(不常用)

3.4 总结

  1. 对于正则表达式的匹配功能,Python没有返回true和false的方法,但可以通过对match或者search方法的返回值是否是None来判断
  2. 对于正则表达式的搜索功能,如果只搜索一次可以使用search或者match方法返回的匹配对象得到,对于搜索多次可以使用finditer方法返回的可迭代对象来迭代访问
  3. 对于正则表达式的替换功能,可以使用正则表达式对象的sub或者subn方法来实现,也可以通过re模块方法sub或者subn来实现,区别在于模块的sub方法的替换文本可以使用一个函数来生成
  4. 对于正则表达式的分割功能,可以使用正则表达式对象的split方法,需要注意如果正则表达式对象有分组的话,分组捕获的内容也会放到返回的列表中

3.5正则表达式的应用

字符验证 只要是有规则的字符串,都可以利用正则表达式来验证。下面给几个常用的正则:

验证email:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[0-9a-zA-Z]+@[0-9a-zA-Z]+\.com

解释:[0-9a-zA-Z] 表示只能为数字或字母,+ 表示一次或多次,@[0-9a-zA-Z]+.com是匹配@qq.com,@163.com这样的情况。

验证手机号码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1[3,5,7,8][0-9]{9}

解释: 手机号一般都是以1开头,第二位是3,5,7,8,后面9位数字 验证网址:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
^(?=^.{3,255}$)(https?://)?([w]{3}.)?([a-zA-Z0-9]+(.|/))+[a-zA-Z0-9]*

验证网址的正则很多,因为网址情况非常多,此正则能验证如下形式的网址:

案例解读

这里只介绍比较用的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##1.re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;

p = re.compile('[0-9a-zA-Z]*\.[0-9a-zA-Z_-]*\.[a-z]*$')
x=p.match( '我爱中国,www.nveyun.com')

print(x)

None

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#2.re.search 匹配整个字符串,这里式邮箱,并返回找的结果
email=re.search('[0-9a-zA-Z]*\.[0-9a-zA-Z_-]*\.[a-z]*', '我爱中国,www.nveyun.com')
print(email.group())   

www.nveyun.com

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
###3.re.sub()   匹配到信息并执行替换,|’或者
ste = re.sub('[,.。?::-_]|[0-9a-zA-Z]*\.[0-9a-zA-Z_-]*\.[a-z.]{0,10}', "",'我爱中国?www.nveyun.com.cn,')
print(ste)   

我爱中国

解读上面的3的正则表达式

附录:转义符

转义字符

描述

\(在行尾时)

续行符

\\

反斜杠符号

\'

单引号

\"

双引号

\a

响铃

\b

退格(Backspace)

\e

转义

\000

\n

换行

\v

纵向制表符

\t

横向制表符

\r

回车

\f

换页

\oyy

八进制数yy代表的字符,例如:\o12代表换行

\xyy

十进制数yy代表的字符,例如:\x0a代表换行

\other

其它的字符以普通格式输出

附录:常见正则表达式

正则表达式

代表的匹配字符

[0-9]

0123456789任意之一

[a-z]

小写字母任意之一

[A-Z]

大写字母任意之一

\d

等同于[0-9]

\D

等同于[^0-9]匹配非数字

\w

等同于[a-z0-9A-Z_]匹配大小写字母、数字和下划线

\W

等同于[^a-z0-9A-Z_]等同于上一条取非

答疑解惑Python群:867300100

Python小白基础视频课 (点击下面直通车)

Python小白基础视频课 (直通车

版权声明:本文为博主原创文章,欢迎交流分享,未经博主允许不得转载。 https://blog.csdn.net/HHTNAN/article/details/84651583**

2018-12-28 更新 常见正则表达式总结

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
非负整数:^\d+$
 
正整数:^[0-9]*[1-9][0-9]*$
 
非正整数:^((-\d+)|(0+))$
 
负整数:^-[0-9]*[1-9][0-9]*$
 
整数:^-?\d+$
 
非负浮点数:^\d+(\.\d+)?$
 
正浮点数 : ^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)$
 
非正浮点数:^((-\d+\.\d+)?)|(0+(\.0+)?))$
 
负浮点数:^(-((正浮点数正则式)))$
 
英文字符串:^[A-Za-z]+$
 
英文大写串:^[A-Z]+$
 
英文小写串:^[a-z]+$
 
英文字符数字串:^[A-Za-z0-9]+$
 
英数字加下划线串:^\w+$
 
E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$
 
URL^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$ 
 或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$
 
邮政编码:^[1-9]\d{5}$
 
中文:^[\u0391-\uFFE5]+$
 
电话号码:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$
 
手机号码:^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$
 
双字节字符(包括汉字在内)^\x00-\xff
 
匹配首尾空格:(^\s*)|(\s*$)(像vbscript那样的trim函数)
 
匹配HTML标记:<(.*)>.*<\/\1>|<(.*) \/>
 
匹配空行:\n[\s| ]*\r
 
提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F)  *=  *('|")?(\w|\\|\/|\.)+('|"|  *|>)?
 
提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
 
提取信息中的图片链接:(s|S)(r|R)(c|C)  *=  *('|")?(\w|\\|\/|\.)+('|"|  *|>)?
 
提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)
 
提取信息中的中国手机号码:(86)*0*13\d{9}
 
提取信息中的中国固定电话号码:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}
 
提取信息中的中国电话号码(包括移动和固定电话):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}
 
提取信息中的中国邮政编码:[1-9]{1}(\d+){5}
 
提取信息中的浮点数(即小数):(-?\d*)\.?\d+
 
提取信息中的任何数字 (-?\d*)(\.\d+)? 
 
IP(\d+)\.(\d+)\.(\d+)\.(\d+)
 
电话区号:/^0\d{2,3}$/
 
腾讯QQ号:^[1-9]*[1-9][0-9]*$
 
帐号(字母开头,允许5-16字节,允许字母数字下划线)^[a-zA-Z][a-zA-Z0-9_]{4,15}$
 
中文、英文、数字及下划线:^[\u4e00-\u9fa5_a-zA-Z0-9]+$
 
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
 
匹配双字节字符(包括汉字在内)[^\x00-\xff]
 
匹配空行的正则表达式:\n[\s| ]*\r
 
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
 
sql语句:^(select|drop|delete|create|update|insert).*$
 
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
 
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年11月30日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JavaApi高级编程(三)正则表达式的运用
目录 一、正则表达式的概念 二、正则表达式的基本书写符号 1、基本书写符号: 2、常用限定符:限定符将可选数量的数据添加到正则表达式 3、匹配字符集: 4、分组构造: 三:常用案例 ---- 一、正则表达式的概念 1、什么是正则表达式:正则表达式是由普通字符(如英文字母)以及特殊字符(也成为元字符)组成的文字模式。该模式对文本查找时需要匹配的一个或多个字符串描述,给出一个匹配模板。 2、正则表达式的优点:正则表达式可以大大简化文本识别工作,现已超出了某种语言或某个系统的局限,成为被人们广为使用的工具
天蝎座的程序媛
2022/11/18
3340
JavaApi高级编程(三)正则表达式的运用
知识总结:常用正则表达式正则表达式
正则表达式 常用正则表达式大全!(例如:匹配中文、匹配html) 匹配中文字符的正则表达式: [u4e00-u9fa5]  评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包
牛客网
2018/04/28
9900
正则表达式1.正则表达式概述2.re模块操作3.表示字符4.re模块的高级用法5.贪婪和非贪婪
在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用一个模块,名字为re
Python攻城狮
2018/08/23
2K0
正则表达式1.正则表达式概述2.re模块操作3.表示字符4.re模块的高级用法5.贪婪和非贪婪
Java 正则表达式的用法和实例
6、\S符号:非空字符 7、\s符号:空字符,只可以匹配一个空格、制表符、回车符、换页符,不可以匹配自己输入的多个空格。 8、\r符号:空格符,与\n、\tab相同
全栈程序员站长
2022/08/30
1.2K0
Java 正则表达式的用法和实例
正则表达式教程
http://regex.larsolavtorvik.com/ http://tool.oschina.net/regex http://www.rubular.com/ http://zhengze.51240.com/ http://www.kingshang.com/ http://zhengze.51240.com/
老高的技术博客
2022/12/24
1.9K0
js正则表达式校验金额-js正则表达式简单校验方法
  对于字符串的一些操作,可以通过正则表达式来实现。一般的搜索操作想必大家已经学会,今天就来说说它的校验功能,这样可以帮助判断字符串类型或者是其它的组成,比如密码、中文、字符串的组成等。下面就js正则表达式的校验带来内容分享,同时要考虑在js中支持的类型。
宜轩
2022/12/29
9.1K0
正则表达式的基本介绍与正则大全
正则表达式(Regular Expression)又称规则表达式,在代码中常简写为Regex、Regexp或RE,它是一种文本模式,包括普通字符(例如a到z之间的字母)和特殊字符(称为"元字符")。
M.Talen
2024/05/22
7140
正则表达式的基本介绍与正则大全
正则表达式(二)
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
胡齐
2020/02/14
7080
版本号的正则表达式-常见正则表达式大全
  评注:腾讯QQ号从10000开始   匹配中国邮政编码:[1-9]d{5}(?!d)   评注:中国邮政编码为6位数字   匹配身份证:d{15}|d{18}   评注:中国的身份证为15位或18
宜轩
2022/12/29
8900
正则表达式 至少6位-字母,数字,下划线或者数字的正则表达式
  一、校验数字的表达式   数字:^[0-9]*$   n位的数字:^\d{n}$   至少n位的数字:^\d{n,}$   m-n位的数字:^\d{m,n}$   零和非零开头的数字:^(0|1-
宜轩
2022/12/29
3.7K0
鸿蒙开发:了解正则表达式
从给出的文本中,按照既定的相关规则,匹配出符合的数据,其中的规则就是正则表达式,使用正则表达式,可以使得我们用简洁的代码就能实现一定复杂的逻辑,比如判断一个邮箱账号是否符合正常的邮箱账号,再比如判断一个手机号是否正常的手机号,等等,正因为有了正则,得以让文本处理起来更加的简单。
程序员一鸣
2024/12/29
1610
鸿蒙开发:了解正则表达式
PHP 正则表达式及常用正则汇总
正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。
V站CEO-西顾
2018/06/10
3.8K2
一起来了解一下正则表达式
在维基百科中,正则表达式被形容是“使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。”
软测小生
2019/07/24
6650
一起来了解一下正则表达式
Python学习笔记(十一)·正则表达式
字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在。比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样做不但麻烦,而且代码难以复用。
公爵
2022/09/28
4370
15 Python 基础: 程序猿必懂知识之正则表达式
字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在。比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样做不但麻烦,而且代码难以复用。
野原测试开发
2019/07/24
9250
15 Python 基础: 程序猿必懂知识之正则表达式
Python3 正则表达式
        正则表达式是用来匹配字符串的强有力武器,它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。
嵌入式视觉
2022/09/05
4900
Python3 正则表达式
常用正则表达式
一, 1.^\d+$    //匹配非负整数(正整数 + 0) ---^:以数字开头 +:之前紧邻出现的一次或多次 2.[0-9]*[1-9][0-9]*$    //匹配正整数 3.^((-\d
用户1197315
2018/01/22
3K0
正则表达式总结
一、元字符 . 匹配除换行符以外的任意字符 \w 匹配单词(字母、数字、下划线、汉字) \s 匹配任意空白符(空格、制表符tab、换行符、中文全角空格) \d 匹配数字 \b 匹配单词的开始或结束,只是一个位置 ^ 匹配字符串的开始 $ 匹配字符串的结束 \b:单词分界符,匹配一个位置(单词开头或结尾),位置处单词结束空格、标点符等。其实\b匹配位置为:其前一个字符和后一个字符不全是\w。 eg. \bhi\b.*\bLucy\b匹配hi后不远跟一个Lucy。 *:指定前面的字符可以重复n次匹配。则.*表
机器学习AI算法工程
2018/03/14
8540
常用正则表达式
  这些正则皆为日常开发总结,一般常用的都用,来源有来自自己总结的,还有的是从网上记录下来的,希望对大家有个帮助,完好正则提高程序性能!
追逐时光者
2019/08/28
1.4K0
正则表达式总结
正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。
Dream城堡
2018/09/10
9250
相关推荐
JavaApi高级编程(三)正则表达式的运用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档