Python的正则表达式需要导入re模块

菜鸟教程:http://www.runoob.com/python/python-reg-expressions.html

官方文档:https://docs.python.org/3.6/library/re.html

一译中文:https://yiyibooks.cn/xx/python_352/library/re.html

常用正则表达式:https://www.cnblogs.com/Akeke/p/6649589.html

===========================================================

1.方法

  findall(pattern, string, flags=0):

pattern 匹配的正则表达式
string 要匹配的字符串。
flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志

    flags:

修饰符 描述
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

    flags可以指定多个  例:re.I | re.S   两者是且的关系

sub(pattern, repl, string, count=0, flags=0):检索和替换

参数:

  • pattern : 正则中的模式字符串。
  • repl : 替换的字符串,也可为一个函数。
  • string : 要被查找替换的原始字符串。
  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

   repl可以为函数 很强大 例:

import re
s = 'A8C3721D86'
def convert(value):
matched = value.group() #拿到具体的值
if int(matched) >= 6:
return ''
else:
return ''
r = re.sub('\d',convert,s)
print(r)
----------------------------------------------------------------
A9C0900D99

      #group([group1, …]) 方法用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用 group() 或 group(0)

match(pattern, string, flags=0):re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

search(pattern, string, flags=0): re.search 扫描整个字符串并返回第一个成功的匹配。

2.元字符 

    

   \d :匹配一个数字字符

   \D:匹配一个非数字字符

   \w:匹配字母数字及下划线 ,字母:单词字符(\的只能匹配a-z A-Z 0-9 _)

   \W:匹配非字母数字及下划线,(&,\n,\r等都算作非字母数字及下划线)

   \s:匹配任意空白字符,等价于 [\t\n\r\f].(制表符都算作空白字符 \n,\t,\r等)

   \S:匹配任意非空字符

   [...]:用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'

import re
s = 'abc,acc,adc,aec,afc,ahc'
r = re.findall('a[cf]c',s)
print(r) ----------
['acc', 'afc']

  [^...]:不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符

数量词

  re{n}:让前面的re表达式匹配多次,例:

import re
s = 'python 11111java678php'
r = re.findall('[a-z]{3}',s)
print(r)
--------------------------------------------------
['pyt', 'hon', 'jav', 'php']

  re{ n, m}:匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式(够多则使用m值)

import re
s = 'python 11111java678php'
r = re.findall('[a-z]{3,6}',s)
print(r)
-----------------------------------------------------
['python', 'java', 'php']

  re{ n, m}?:可以转换为非贪婪方式(使用n值)

  re*:匹配0个或多个的表达式。(*前面的字符)

import re
s = 'pytho0python1pythonn2'
r = re.findall('python*',s)
print(r)
-------------------------------------------------
['pytho', 'python', 'pythonn']

  re+:匹配1个或多个的表达式。

  re?:匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式(有一个也匹配,忽略后面多的re)

import re
s = 'pytho0python1pythonn2'
r = re.findall('python?',s)
print(r)
----------------------------------------------
['pytho', 'python', 'python']

  . :匹配任意字符,除了换行符\n,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。

边界匹配

  ^:匹配字符串的开头

  $:匹配字符串的末尾

import re
qq = ''
r = re.findall('\d{4,8}',qq)
print("\d{4,8} : " + str(r)) r2 = re.findall('^\d{4,8}',qq)
print('^\d{4,8}: '+str(r2)) r3 = re.findall('\d{4,8}$',qq)
print('\d{4,8}$: '+ str(r3)) r4 = re.findall('^\d{4,8}$',qq) #匹配整个字符串
print('^\d{4,8}$: '+ str(r4)) r5 = re.findall('^000',qq) #^匹配字符串开头,则开头必须000 ;$同理
print('^000: '+ str(r5))
-----------------------------------------------------------------------------
\d{4,8} : ['']
^\d{4,8}: ['']
\d{4,8}$: ['']
^\d{4,8}$: []
^000: []

 

  (re):匹配括号内的表达式,也表示一个组

import re
qq = 'PythonPythonPythonPythonPythonPythonPython'
r = re.findall('(Python){3}',qq)
print(r)
------------------------------------------------------------------------
['Python', 'Python']

========================================================================

JSON

导入json模块

反序列化过程

import json
json_str = '{"name":"zhangsan","age":18}' #这里的json 中的字符串类型必须用"" ,因为里面用了"",所以外面需要用''
student = json.loads(json_str)
print(type(student))
print(student)
-----------------------------------------------------------------------
<class 'dict'>
{'name': 'zhangsan', 'age': 18}
import json
json_str = '[{"name":"zhangsan","age":18},{"name":"lisi","age":19}]'
student = json.loads(json_str)
print(type(student))
print(student)
--------------------------------------------------------------------
<class 'list'>
[{'name': 'zhangsan', 'age': 18}, {'name': 'lisi', 'age': 19}]

序列化过程

import json
student = [{'name':'zhangsan','age':18,'flag':False},{'name':'lisi','age':18,'flag':True}]
json_str = json.dumps(student)
print(type(json_str))
print(json_str)
-----------------------------------------------------------------------------
<class 'str'>
[{"name": "zhangsan", "age": 18, "flag": false}, {"name": "lisi", "age": 18, "flag": true}]

JSON中的数据类型和python中的对应关系:

JSON对象:

JSON:

JSON字符串:

   

Python的正则表达式与JSON的更多相关文章

  1. Python(八) 正则表达式与JSON

    一.初识正则表达式 正则表达式 是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配 快速检索文本.实现替换文本的操作 json(xml) 轻量级 web 数据交换格式 impor ...

  2. python 历险记(六)— python 对正则表达式的使用(上篇)

    目录 引言 什么是正则表达式? 正则表达式有什么用? 正则表达式的语法及使用实例 正则表达式语法有哪些? 这些正则到底该怎么用? 小结 参考文档 系列文章列表 引言 刚接触正则表达式,我也曾被它们天书 ...

  3. Python语言中对于json数据的编解码——Usage of json a Python standard library

    一.概述 1.1 关于JSON数据格式 JSON (JavaScript Object Notation), specified by RFC 7159 (which obsoletes RFC 46 ...

  4. [python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】

    [python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pytho ...

  5. Python 进阶 - 正则表达式

    1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...

  6. python study - 正则表达式

    第 7 章 正则表达式 7.1. 概览 7.2. 个案研究:街道地址 7.3. 个案研究:罗马字母 7.3.1. 校验千位数 7.3.2. 校验百位数 7.4. 使用 {n,m} 语法 7.4.1. ...

  7. python使用正则表达式文本替换

    2D客户端编程从某种意义上来讲就是素材组织,所以,图片素材组织经常需要批量处理,python一定是最佳选择,不管是win/linux/mac都有一个简单的运行环境 举两个应用场景: 如果不是在某个文件 ...

  8. python的正则表达式 re

    python的正则表达式 re 本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以是Unicode字符,这点不用担心,python会处理地和Ascii字符一 ...

  9. Python之正则表达式(re模块)

    本节内容 re模块介绍 使用re模块的步骤 re模块简单应用示例 关于匹配对象的说明 说说正则表达式字符串前的r前缀 re模块综合应用实例 正则表达式(Regluar Expressions)又称规则 ...

随机推荐

  1. Django服务器启动时指定端口和IP方法

    python manager.py runserver 127.0.0.1:8001

  2. js之math 对象

    Math 对象是js中使用数学公式计算的便捷方法,其方法运行起来比直接写的js运行是对要更快 1.Math.min(一组数值)  该方法可以比较一组数值的大小,并且返回较小的数值 用法: Math.m ...

  3. C++命名空间、函数重载、缺省参数、内联函数、引用

    一 .C++入门 1.C++关键字 2.命名空间 3.C++输入&输出 4.缺省参数 5.函数重载 6.引用 7.内联函数 8.auto关键字 9.基于范围的for循环 10.指针空值null ...

  4. 【bzoj4712】洪水 动态dp

    不难发现此题是一道动态$dp$题 考虑此题没有修改怎么做,令$f[i]$表示让以$i$为根的子树被覆盖的最小花费,不难推出$f[i]=min(\sum_{j∈son[i]} f[j],val[i])$ ...

  5. POJ 1169

    #include<iostream> #include<algorithm> #include<vector> #include<set> #defin ...

  6. 《Mysql技术内幕,Innodb存储引擎》——事物

    事物 事物中的操作要么都成功要么都不做,这是事物的目的,也是事物模型与文件系统的重要特征之一. 扁平事物(Flat Transactions) 所有操作都处于同一层次,要么都做要么都执行要么都回滚,无 ...

  7. ambari 2.6.2 安装 hdp 2.6.5.0 遇到的问题

    1.hive-client 无法安装 一直报错(symlink target  already exists and it is not a symlink.),hive-client 已经存在且不是 ...

  8. Redis持久化配置-AOF

    redis的持久化有rdb和aof两种. rdb是记录一段时间内的操作,一般的配置是一段时间内操作超过多少次就持久化.aof可以实现每次操作都持久化. 这里我们使用aof. 配置方式,打开redis的 ...

  9. android即时通信开源项目信息

    源码提供!Android即时通讯和sns开源项目汇总 http://www.jianshu.com/p/b2ca52337fe5

  10. Ceph 块设备 - 命令,快照,镜像

    目录 一.Ceph 块设备 二.块设备 rbd 命令 三.操作内核模块 四.快照基础 rbd snap 五.分层快照 六.镜像 rbd mirror 七.QEMU 八.libvirt 九.Openst ...