一、基础语法

1.1 语法速查

1.2 最简单的正则匹配

学习正则一般是从 match 和 search 函数开始,推荐教程。

match

match(pattern, string) 函数会从字符串的头部开始搜索,如果匹配到了 pattern 则将其结果存入 group 中,匹配到了几次就存入几次,如果没有匹配到则返回空。

import re

a = "Jack love Rose"

res = re.match(r"Jack", a)

if res:

print(res.group(0))

输出结果

Jack

search

如果想在句子中匹配某个单词应该使用 search() 函数,使用match() 函数是搜索不到的

import re

a = "Jack love coding!"

res1 = re.match(r"love", a)

res2 = re.search(r"love", a)

if res1:

print(res1.group(0))

if res2:

print(res2.group(0))

输出结果

love

如果匹配了多个结果,那么同样的,输出 group(2)、group(3)……

import re

a = "Jack love Rose and love coding!"

res = re.search(r"Jack (.*) and (.*) coding!", a)

if res:

print(res.group(1))

print(res.group(2))

输出结果

love Rose

love

match 和 search 函数适合于本身已经知道了有几个需要匹配项的情况,如果需要找出所有的匹配项,应该使用 findall,后面会讲到。

compile

函数声明

re.compile(pattern[, flags])

flags 是一个可选参数,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:

我们来尝试一下

import re

a = "Jack love Rose and love coding!"

# 忽略大小写

pattern = re.compile(r"JACK (.*) AND (.*) coding!", re.I)

res = pattern.match(a)

if res:

print(res.group(1))

print(res.group(2))

输出结果

love Rose

love

findall

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

注意: match 和 search 是匹配一次, findall 匹配所有。

import re

pattern = re.compile(r'\d+') # 查找数字

result1 = pattern.findall('www.hao123baidu456.com')

result2 = pattern.findall('www.hao123baidu456.com', 0, 10) # 指定匹配范围

print(result1)

print(result2)

输出结果

['123', '456']

['123']

1.3 转义字符匹配

转义字符的匹配需要 "\" 做转义。匹配括号

import re

# 匹配括号里的内容

a = "www.hao123(baidu)456.com"

# 忽略大小写

pattern = re.compile(r"\((.*)\)")

res = pattern.findall(a)

print(res[0])

输出内容

baidu匹配$

$是一个特殊的字符,在正则中表示以某字符结尾,假设我们要匹配 $$ 中间的内容(经常在公式转换中使用),应该怎么写呢?

import re

a = "$y=x^2$"

# 匹配$$中间的内容

pattern = re.compile(r"\$(.*)\$")

res = pattern.findall(a)

print(res[0])

输出结果

y=x^2

其他的转义字符使用方式类似。

1.4 正则替换

Python 的re模块提供了re.sub用于替换字符串中的匹配项。函数声明如下

re.sub(pattern, repl, string, count=0, flags=0)【例 1】将字符串中的 s 替换为 A

import re

a = "this is hust"

pattern = re.compile(r"s")

res = re.sub(pattern, "A", a)

print(res)

输出结果

thiA iA huAt【例 2】将字符串中的 $A$ 替换为 `$A$`

import re

# replace $A$ to `$A$`

a = "设集合$a={1,2,3}$,求集合$a$的子集个数。"

b = re.sub(r'\$(.+?)\$', r'`$\1$`', a)

print(a)

print(b)

输出结果

设集合$a={1,2,3}$,求集合$a$的子集个数。

设集合`$a={1,2,3}$`,求集合`$a$`的子集个数。

这里有个注意的点, \1 表示匹配到的内容。【例 2】将字符串中的无效,测试替换为空字符

import re

a = "华中科技大学机械学院(无效)"

b = "华中科技大学紫菘公寓(测试)"

c = "华中科技大学无效紫菘测试公寓(西区)"

pattern = re.compile(u"(无效|测试)")

res1 = re.sub(pattern, "", a)

res2 = re.sub(pattern, "", b)

res3 = re.sub(pattern, "", c)

print(res1)

print(res2)

print(res3)

输出结果

华中科技大学机械学院()

华中科技大学紫菘公寓()

华中科技大学紫菘公寓(西区)

二、进阶用法

2.1 判断字符串是否为数字

import re

a = "-1234"

b = "-12.34"

c = ".34"

print(re.match(r'^[+-]?\d+$', a)) # 匹配int 1

print(re.match(r'^[+-]?[0-9].*$', a)) # 匹配int 2

print(re.match(r'^[+-]?\d*(\.)\d+$', b)) # 匹配float

print(re.match(r'^[+-]?\d*(\.)\d+$', c)) # 匹配float

print(re.match(r'^[+-]?\d*(\.)?\d+$', a)) # 匹配int 或 float

输出结果

2.2 去除括号中的内容

去除括号里的内容其实就是利用 re.sub 的替换功能

import re

a = "华中科技大学附属同济医院(西区)"

pattern = re.compile(u"\$(.*)\$")

res = re.sub(pattern, "", a)

print(res)

输出结果

华中科技大学附属同济医院

2.3 去除脏符号【例 1】因为平时工作中接触数据很多,经常需要对数据进行清洗,其中一个很重要的流程就是去除字符串中除了中文、英文、括号之外的所有字符,这个实现如下

import re

a = "华中科技大学机械学院 B240 (研究生工作室;电话联系)。"

pattern = re.compile(u"[^\u4e00-\u9fa50-9a-zA-Z()()]")

res = re.sub(pattern, "", a)

print(res)

输出结果

华中科技大学机械学院B240(研究生工作室电话联系)【例 2】括号内不是期或者区则删掉括号内容

import re

a = "华中科技大学紫菘公寓(一期)。"

b = "华中科技大学紫菘公寓(西)。"

pattern = re.compile(u"\((?!.*[区期]).*\)|\((?!.*[区期]).*\)")

res1 = re.sub(pattern, "", a)

res2 = re.sub(pattern, "", b)

print(res1)

print(res2)

输出结果

华中科技大学紫菘公寓(一期)。

华中科技大学紫菘公寓。

python正则判断_Python 正则表达式相关推荐

  1. python正则判断_python正则表达式

    python要用正则要导入re包 . (点) 在默认模式,匹配除了换行的任意字符.如果指定了标签 DOTALL ,它将匹配包括换行符的任意字符. ^ (插入符号) 匹配字符串的开头, 并且在 MULT ...

  2. python正则库_python 正则表达式第三方库 re的基本使用

    re模块简介: 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配,而re模块就是python中实现正则的模块 正则表达式简介: 非打印字符: 非打印字符也可以是正则表达 ...

  3. python正则匹配_Python正则表达式只匹配一次

    我正在尝试创建一个简单的降价乳胶转换器,只是为了学习 python和基本的正则表达式,但我不知道试图弄清楚为什么下面的代码不起作用: re.sub (r'\[\*\](.*?)\[\*\]: ?(.* ...

  4. python正则匹配_python 正则表达式详解

    正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能 ...

  5. python正则匹配_Python正则表达式详解

    正则表达式,又称规则表达式(Regular Expression),是使用单个字符串来描述.匹配某个句法规则的字符串,常被用来检索.替换那些符合某个模式(规则)的文本.最初的正则表达式出现于理论计算机 ...

  6. python正则匹配_Python正则表达式初识(五)

    原标题:Python正则表达式初识(五) 正则表达式的内容很丰富,今天小编继续给大家分享Python正则表达式的基础知识.今天要给大家的讲的特殊字符是竖线"|".竖线"| ...

  7. python正则查找_python正则查找

    [转摘]PYTHON 正则表达式 网上转的一篇,把正则的规则系统的分类了.. 好文,共享,备查 ~~~~~~~~~~~ http://www.cnblogs.com/huxi/archive/2010 ...

  8. python正则检验_Python 检测生僻字

    最近碰到一个需求,要求检测字段是否包含生僻字以及一些非法字符如 ~!@#$%^&*. 首先想到的就是利用 python 的正则表达式来匹配非法字符,然后找出非法记录.然而理想总是丰满的,现实却 ...

  9. python 正则 空格_python 正则详解

    正则表达式概述 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),是计算机科学的 ...

最新文章

  1. 目标识别的选择性搜索
  2. RequisitePro SQL SERVER数据库的配置
  3. python爬虫挖掘平台搭建_一篇非常棒的安装Python及爬虫入门博文!
  4. PHP 实现图片验证码
  5. ConcurrentHashMap,一个更快的HashMap
  6. window下的SCROLLbar的使用技巧
  7. linux下gimp工具栏,Gimp使用小技巧
  8. zabbix agent启动不了
  9. python 双冒号切片_Numpy 学习笔记
  10. 觉得自己目前还很菜。
  11. FreeCAD 扫掠空间曲线
  12. laravel的elixir和gulp用来对前端施工
  13. win10计算机历史记录,教你win10如何查看电脑开机历史记录
  14. 将m3u8文件转MP4、TS、flv、mkv等文件
  15. “挖矿2.0”:资本方不是只能割区块链的韭菜
  16. ecshop后台出现Strict Standards: Only variables should be passed by refin /var/www·····
  17. Windows下如何将文件打包压缩成 .tar.gz格式
  18. VN.PY量化框架创始人教你做量化交易
  19. 当指挥中心有了“最强大脑”
  20. 我犯了一个低级的C++的逻辑错误

热门文章

  1. 自定义背景_新版快绘精选:自定义背景墙 | 吊顶 | 云渲染滤镜升级
  2. 从燃尽图看项目管理:你的项目哪里出错了?(燃尽图类型全解析)
  3. _INTSIZEOF
  4. 如何开发一个异常检测系统:异常检测 vs 监督学习
  5. Mysql group by 问题
  6. mongodb3.0 性能測试报告 一
  7. 30 个很棒的 PHP 开源 CMS 内容管理系统
  8. mysql-安装报错计算机中丢失MSVCR100.dll文件丢失
  9. 脚本启动慢_Linux 常用运维脚本,建议收藏
  10. 第一个django项目