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. 基于ajax 的 几个例子 session ,ajax 实现登录,验证码 ,实现ajax表单展示

    headers: {"X-CSRFToken": $("[name='csrfmiddlewaretoken']").val()},data:$(". ...

  2. Ubuntu软件更新时出错问题解决

    apt-get instal update 提示:错误,无法解析域名等等之类的 网上解决办法一大堆,先别急着用网上的方法,来检查检查系统是否有网络连接 网络图标显示网络连接,等等,别被表面迷惑了,命令 ...

  3. POJ 2316

    #include<iostream> #include<stdio.h> #include<string> using namespace std; ]; int ...

  4. csc命令

    CSC.exe把Visual C#程序代码编译成IL文件时,有着很多参数和开关选项.正确的了解和运用这些参数和开关有时会解 决一些看似很棘手的问题.下面就通过一张表来大致说明一下这些参数和开关的具体作 ...

  5. 【jQuery源码】html,text,val

    jQuery封装的方法html,text,val .html()用为读取和修改元素的HTML标签 .text()用来读取或修改元素的纯文本内容 .val()用来读取或修改表单元素的value值 一.h ...

  6. web与app测试的区别

    单纯从功能测试的层面上来讲的话,APP 测试.web 测试 在流程和功能测试上是没有区别的. 系统架构方面: web项目,一般都是b/s架构,基于浏览器的 app项目,则是c/s的,必须要有客户端,用 ...

  7. Android之从TCP/IP、HTTP看Socket通信

    1.概念 TCP/IP:属于传输层/网络层协议.手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络数据的传 ...

  8. Android之ListView的使用技巧

    之前有总结过关于ListView的一些优化技巧,比如它的ConvertView的复用Recycler机制,使用ViewHolder来提高列表条目的findById的效率,以及宽高的设置确定值的好处,如 ...

  9. invalid request block size: 4542 (max 4096)...skip引起的Nginx 502 Bad Geteway

    今天有用户报告了一个issue: 当他访问我们的网站时出现了以下错误: 但是我访问同样的地址却没有这个问题,连续访问多次,查看uWSGI日志发现出现以下ERROR: 原来是请求头的大小超出了uWSGI ...

  10. python mysql uitl

    from traceback import format_exc import pymysql as MySQLdb class MySQLUtils(object): def get_db_conn ...