以下整理python中常用的正则符号,相信能够熟悉掌握这些正则符号,大部分字符串处理将会游刃有余。

符号 含义 示例
. 可以匹配任意字符,但不包含换行符'\n' Pyt.on ->Pytmon
\ 转义符,一般用于保留字符串中的特殊元字符 10\.3 ->10.3
| 逻辑或 人a|A->人a或者人A
[] 用于匹配的一组字符 m[aA]n ->man 或者 mAn
\d与\D \d匹配任意数字,\D代表所有的非\d 今天\d号 ->今天3号
\s与\S \s匹配任意空白字符,\S代表所有非\s 你\s好 ->你  好
\w与\W \w匹配字母数字和下划线,\W代表所有非\w P\wy ->Pay 或者 P3y  P_y
* 匹配前一个字符0到无穷次 OK* ->O或者OK 或 OKK
+ 匹配前一个字符1到无穷次 OK+ ->OK或者OK 或 OKK
匹配前一个字符0到1次 OK? ->O或者OK
{m} 匹配前一个字符m次 OK{3} ->OKKK
{m,n} 匹配前一个字符m到n次 OK{1,2} ->OK或者OKK

另外 (.*?)用于分组,默认返回括号内的匹配内容,

在Python开发爬虫过程中经常会遇到正则表达式,其中(.*?) 的使用概率较高,那么这个正则表达式到底什么意思呢?

“.*?” 表示非贪心算法,表示要精确的配对。

“.*”表示贪心算法,表示要尽可能多的匹配

“()” 表示要获取括弧之间的信息。

基于正则表达式完成字符串的查询,替换和分割操作,这些操作都需要导入re模块,并使用如下几个函数。

1.匹配查询函数
findall(pattern, string, flags=0)
findall 函数可以对指定的字符串进行遍历匹配,获取字符串中所有匹配的子串,并返回一个列表结果。该函数的参数含义如下:
pattern:指定需要匹配的正则表达式。
string:指定待处理的字符flags:指定匹配模式,常用的值可以是re.I、re.M、re.S和re.X。

re.I的模式是让正则表达式对大小写不敏感;

re.M的模式是让正则表达式可以多行匹配;

re.S的模式指明正则符号.可以匹配任意字符,包括换行符\n;

re.X模式允许正则表达式可以写得更加详细,如多行表示、忽略空白字符、加入注释等。

2.匹配替换函数
sub(pattern, repl, string, count=0, flags=0)
sub函数的功能是替换,类似于字符串的replace方法,该函数根据正则表达式把满足匹配的内容替换为repl。该函数的参数含义如下:
pattern:同findall函数中的pattern。
repl:  指定替换成的新值。
string:同findall函数中的string。
count:用于指定最多替换的次数,默认为全部替换。
flags:同findall函数中的flags。

3.匹配分割函数
split(pattern, string, maxsplit=0, flags=0)
split函数是将字符串按照指定的正则表达式分隔开,类似于字符串的split方法。该函数的具体参数含义如下:
pattern:同findall函数中的pattern。
maxsplit:用于指定最大分割次数,默认为全部分割。
string:同findall函数中的string。
flags:同findall函数中的flags。

示例:

import re

string8 = "{ymd:'2018-01-01',tianqi:'晴',aqiInfo:'轻度污染'},{ymd:'2018-01-02',tianqi:'阴~小雨',aqiInfo:'优'},{ymd:'2018-01-03',tianqi:'小雨~中雨',aqiInfo:'优'},{ymd:'2018-01-04',tianqi:'中雨~小雨',aqiInfo:'优'}"

#取出字符串中所有的天气状态

print(re.findall("tianqi:'(.*?)' '',string8))     #此处注意观察,(.*?)'  这里面使用的是精确匹配,当匹配到后面是' 号就停止

string9="I don't want to be someone that you're settling for. I don't want to be someone that anyone settles for. "

print(re.findall('\w*o\w',string9,flags = re.I))     #此处留个缺陷" don't  you're "匹配出来不是我们想要的结果,用于思考

##out:

['don', 'someon', 'you', 'for', 'don', 'someon', 'anyon', 'for']

string10 = '据路透社报道,由于土耳其军队离美军驻地已经过近,美军数架F-15战斗机和AH-64“阿帕奇”攻击直升机在土军阵地上方进行了威慑性飞行。'

print(re.sub('[,。,“”a-zA-Z0-9()]','',string10))    #将标点符号,数字和字母删除

out:

据路透社报道由于土耳其军队离美军驻地已经过近美军数架-战斗机和-阿帕奇攻击直升机在土军阵地上方进行了威慑性飞行

#将每一部分的内容分割开

string11 = '2室2厅 | 101.62平 |低区/7层 | 朝南 \n 上海未来 - 浦东-金杨 -2005年建'

split =re.split('[-\|\n]',string11)      #[]列表内的所有符号作为分隔的标志

print(split)

split_strip = [i.strip() for i in split]

print(split_strip )

out:

['2室2厅', '101.62平', '低区/7层', '朝南', '上海未来', '浦东', '金杨', '2005年建']
												

python之常用正则表达式的更多相关文章

  1. python 正则,常用正则表达式大全

    Nginx访问日志匹配 re.compile #re.compile 规则解释,改规则必须从前面开始匹配一个一个写到后面,前面一个修改后面全部错误.特殊标准结束为符号为空或者双引号:  改符号开始 从 ...

  2. Python:常用正则表达式(一)

    文章转载于:http://www.cnblogs.com/Akeke/(博主:Akeke) https://www.cnblogs.com/Akeke/p/6649589.html (基于JavaSc ...

  3. python爬虫常用正则表达式组合匹配

    ["\']匹配什么?(.*?)匹配什么? ["\']       -----------     匹配单双引号 (.*?)xxx ----------- 匹配任意长度字符+xxx ...

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

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

  5. 常用正则表达式与python中的re模块

    正则表达式是一种通用的字符串匹配技术,不会因为编程语言不一样而发生变化. 部分常用正则表达式规则介绍: . 匹配任意的一个字符串,除了\n * 匹配任意字符串0次或者任意次 \w 匹配字母.数字.下划 ...

  6. python基础之正则表达式

    正则表达式语法 正则表达式 (或 RE) 指定一组字符串匹配它;在此模块中的功能让您检查一下,如果一个特定的字符串匹配给定的正则表达式 (或给定的正则表达式匹配特定的字符串,可归结为同一件事). 正则 ...

  7. Python::re 模块 -- 在Python中使用正则表达式

    前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...

  8. python的re正则表达式模块学习

    python中re模块的用法   Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析.复杂字符串分析和信息提取时是一个非常有用的工 ...

  9. Python自动化 【第五篇】:Python基础-常用模块

    目录 模块介绍 time和datetime模块 random os sys shutil json和pickle shelve xml处理 yaml处理 configparser hashlib re ...

随机推荐

  1. webpack 4.x版本手动配置

    运行 npm init -y 快速初始化项目 在项目根目录创建src源代码目录和dist产品目录 在src目录下创建 index.html mani.js文件如果后期使用entry打包,这里可以手动创 ...

  2. ken桑带你读源码 之scrapy scrapy\core\scheduler.py

    从英文来看是调度程序  我们看看是怎么调度 首先爬虫队列有两个 一个是保存在内存中  没有历史记录   重新开始  42行  self.mqs = self.pqclass(self._newmq) ...

  3. cpp求职

    //Created by Arc on 2020/5/23 //////// Created by snnnow on 2020/5/20.//////面向对象的程序设计-期中测试// 根据题目实现求 ...

  4. ZROI 提高十连测 Day1

    第一天的提高模拟测 考前特意睡了20min 还是歇菜了,果然自己菜是真实的. 题目质量海星 但是我都不会这是真的...题目由于是花钱买的这里就不放了 LINK:problem 熟悉我的人应该都知道账号 ...

  5. 从入门到熟悉HTTPS的9个问题

    原文:bestswifter   https://juejin.im/post/58c5268a61ff4b005d99652a Q1: 什么是 HTTPS? BS: HTTPS 是安全的 HTTP ...

  6. Kafka 错误信息 java.io.IOException: Can't resolve address: VM_0_15_centos:9092

    kafka   安装完成之后 代码运行的时候,运行完成报这个错误 java.io.IOException: Can't resolve address: VM_0_15_centos:9092 解决办 ...

  7. 029_go语言中的非阻塞通道

    代码演示 package main import "fmt" func main() { messages := make(chan string) signals := make ...

  8. java_内部类、匿名内部类的使用

    内部类 将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类. 内部类的分类 成员内部类,类定义在了成员位置 (类中方法外称为成员位置) 局部内部类,类定义在方法内 成员内部类 ...

  9. DB2 SQL Error: SQLCODE=-1585, SQLSTATE=54048

    DB2 执行SQL报错: DB2 SQL Error: SQLCODE=-1585, SQLSTATE=54048 你建的db2数据库没有建足够大的临时表空间,新建一个足够大的临时表空间 1.创建数据 ...

  10. 吐血整理:二叉树、红黑树、B&B+树超齐全,快速搞定数据结构

    前言 没有必要过度关注本文中二叉树的增删改导致的结构改变,规则操作什么的了解一下就好,看不下去就跳过,本文过多的XX树操作图片纯粹是为了作为规则记录,该文章主要目的是增强下个人对各种常用XX树的设计及 ...