python要用正则要导入re包

.

(点) 在默认模式,匹配除了换行的任意字符。如果指定了标签 DOTALL ,它将匹配包括换行符的任意字符。

^

(插入符号) 匹配字符串的开头, 并且在 MULTILINE 模式也匹配换行后的首个符号。

$

匹配字符串尾或者换行符的前一个字符,在 MULTILINE 模式匹配换行符的前一个字符。 foo 匹配 'foo' 和 'foobar' , 但正则 foo$ 只匹配 'foo'。更有趣的是, 在 'foo1\nfoo2\n' 搜索 foo.$ ,通常匹配 'foo2' ,但在 MULTILINE 模式 ,可以匹配到 'foo1' ;在 'foo\n' 搜索 $ 会找到两个空串:一个在换行前,一个在字符串最后。

*

对它前面的正则式匹配0到任意次重复, 尽量多的匹配字符串。 ab* 会匹配 'a', 'ab', 或者 'a'``后面跟随任意个 ``'b'。

+

对它前面的正则式匹配1到任意次重复。 ab+ 会匹配 'a' 后面跟随1个以上到任意个 'b',它不会匹配 'a'。

?

对它前面的正则式匹配0到1次重复。 ab? 会匹配 'a' 或者 'ab'。

*?, +?, ??

'*', '+',和 '?' 修饰符都是 贪婪的;它们在字符串进行尽可能多的匹配。有时候并不需要这种行为。如果正则式 <.> 希望找到 ' b ',它将会匹配整个字符串,而不仅是 '

"{m}"

对其之前的正则式指定匹配 m 个重复;少于 m 的话就会导致匹配失败。比如, a{6} 将匹配6个 'a' , 但是不能是5个。

"{m, n}"

对正则式进行 m 到 n 次匹配,在 m 和 n 之间取尽量多。 比如,a{3,5} 将匹配 3 到 5个 'a'。忽略 m 意为指定下界为0,忽略 n 指定上界为无限次。 比如 a{4,}b 将匹配 'aaaab' 或者1000个 'a' 尾随一个 'b',但不能匹配 'aaab'。逗号不能省略,否则无法辨别修饰符应该忽略哪个边界。

{m,n}?

前一个修饰符的非贪婪模式,只匹配尽量少的字符次数。比如,对于 'aaaaaa', a{3,5} 匹配 5个 'a' ,而 a{3,5}? 只匹配3个 'a'。

\

转义特殊字符(允许你匹配 '*', '?', 或者此类其他),或者表示一个特殊序列;特殊序列之后进行讨论。

如果你没有使用原始字符串( r'raw' )来表达样式,要牢记Python也使用反斜杠作为转义序列;如果转义序列不被Python的分析器识别,反斜杠和字符才能出现在字符串中。如果Python可以识别这个序列,那么反斜杠就应该重复两次。这将导致理解障碍,所以高度推荐,就算是最简单的表达式,也要使用原始字符串。

[]

用于表示一个字符集合。在一个集合中:

字符可以单独列出,比如 [amk] 匹配 'a', 'm', 或者 'k'。

可以表示字符范围,通过用 '-' 将两个字符连起来。比如 [a-z] 将匹配任何小写ASCII字符, [0-5][0-9] 将匹配从 00 到 59 的两位数字, [0-9A-Fa-f] 将匹配任何十六进制数位。 如果 - 进行了转义 (比如 [a\-z])或者它的位置在首位或者末尾(如 [-a] 或 [a-]),它就只表示普通字符 '-'。

特殊字符在集合中,失去它的特殊含义。比如 [(+*)] 只会匹配这几个文法字符 '(', '+', '*', or ')'。

字符类如 \w 或者 \S (如下定义) 在集合内可以接受,它们可以匹配的字符由 ASCII 或者 LOCALE 模式决定。

不在集合范围内的字符可以通过 取反 来进行匹配。如果集合首字符是 '^' ,所有 不 在集合内的字符将会被匹配,比如 [^5] 将匹配所有字符,除了 '5', [^^] 将匹配所有字符,除了 '^'. ^ 如果不在集合首位,就没有特殊含义。

在集合内要匹配一个字符 ']',有两种方法,要么就在它之前加上反斜杠,要么就把它放到集合首位。比如, [()[\]{}] 和 []()[{}] 都可以匹配括号。

Unicode Technical Standard #18 里的嵌套集合和集合操作支持可能在未来添加。这将会改变语法,所以为了帮助这个改变,一个 FutureWarning 将会在有多义的情况里被 raise,包含以下几种情况,集合由 '[' 开始,或者包含下列字符序列 '--', '&&', '~~', 和 '||'。为了避免警告,需要将它们用反斜杠转义。

.是贪婪匹配 .?是非贪婪匹配

比如说我们匹配apple

\A

只匹配字符串开始。

\b

匹配空字符串,但只在单词开始或结尾的位置。一个单词被定义为一个单词字符的序列。注意,通常 \b 定义为 \w 和 \W 字符之间,或者 \w 和字符串开始/结尾的边界, 意思就是 r'\bfoo\b' 匹配 'foo', 'foo.', '(foo)', 'bar foo baz' 但不匹配 'foobar' 或者 'foo3'。

默认情况下,Unicode字母和数字是在Unicode样式中使用的,但是可以用 ASCII 标记来更改。如果 LOCALE 标记被设置的话,词的边界是由当前语言区域设置决定的,\b 表示退格字符,以便与Python字符串文本兼容。

\B

匹配空字符串,但 不 能在词的开头或者结尾。意思就是 r'py\B' 匹配 'python', 'py3', 'py2', 但不匹配 'py', 'py.', 或者 'py!'. \B 是 \b 的取非,所以Unicode样式的词语是由Unicode字母,数字或下划线构成的,虽然可以用 ASCII 标志来改变。如果使用了 LOCALE 标志,则词的边界由当前语言区域设置。

\d

对于 Unicode (str) 样式:

匹配任何Unicode十进制数(就是在Unicode字符目录[Nd]里的字符)。这包括了 [0-9] ,和很多其他的数字字符。如果设置了 ASCII 标志,就只匹配 [0-9] 。

对于8位(bytes)样式:

匹配任何十进制数,就是 [0-9]。

\D

匹配任何非十进制数字的字符。就是 \d 取非。 如果设置了 ASCII 标志,就相当于 [^0-9] 。

\s

对于 Unicode (str) 样式:

匹配任何Unicode空白字符(包括 [ \t\n\r\f\v] ,还有很多其他字符,比如不同语言排版规则约定的不换行空格)。如果 ASCII 被设置,就只匹配 [ \t\n\r\f\v] 。

对于8位(bytes)样式:

匹配ASCII中的空白字符,就是 [ \t\n\r\f\v] 。

\S

匹配任何非空白字符。就是 \s 取非。如果设置了 ASCII 标志,就相当于 [^ \t\n\r\f\v] 。

\w

对于 Unicode (str) 样式:

匹配Unicode词语的字符,包含了可以构成词语的绝大部分字符,也包括数字和下划线。如果设置了 ASCII 标志,就只匹配 [a-zA-Z0-9_] 。

对于8位(bytes)样式:

匹配ASCII字符中的数字和字母和下划线,就是 [a-zA-Z0-9_] 。如果设置了 LOCALE 标记,就匹配当前语言区域的数字和字母和下划线。

\W

匹配任何不是单词字符的字符。 这与 \w 正相反。 如果使用了 ASCII 旗标,这就等价于 [^a-zA-Z0-9_]。 如果使用了 LOCALE 旗标,则会匹配在当前区域设置中不是字母数字又不是下划线的字符。

\Z

只匹配字符串尾。

然后再来说几个flag(匹配模式)

re.I 忽略大小写

re.S 可以让.也匹配换行符

re.compile(pattern,flag=0)

这里我们还是拿豆瓣来做演示

我们取出一部分

来获取href的链接,先写出正则表达式来

compile = re.compile('a href="(http.*?)"',re.I|re.S)

在python中正则里面要获取内容就要用()包起来

import re

compile = re.compile('a href="(http.*?)"',re.I|re.S)

result = compile.findall("""

""")

for r in result:

print(r)

输出结果

G:\python3.8\python.exe "F:/python post/code/zengze.py"

https://book.douban.com/cart/

https://read.douban.com/ebooks/?dcs=book-nav&dcm=douban

https://market.douban.com/book?utm_campaign=book_nav_freyr&utm_source=douban&utm_medium=pc_web

https://book.douban.com/annual/2019?source=navigation

https://m.douban.com/standbyme/annual2019?source=navigation

https://market.douban.com/cart/?biz_type=book&utm_campaign=book_nav_cart&utm_source=douban&utm_medium=pc_web

Process finished with exit code 0

再来用正则获取豆瓣小说名

import requests

import re

title = re.compile('(.*?)',re.I|re.S)

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'

}

html = requests.get('https://book.douban.com/tag/%E5%B0%8F%E8%AF%B4',headers=headers)

result = title.findall(html.text)

for r in result:

print(r.strip().replace('\n',''))

输出

G:\python3.8\python.exe "F:/python post/code/zengze.py"

坏小孩 : 推理之王2

活着

白夜行

小王子

解忧杂货店

红楼梦

追风筝的人

百年孤独

房思琪的初恋乐园

长夜难明 : 推理之王3

嫌疑人X的献身

平凡的世界(全三部)

1984

月亮与六便士

霍乱时期的爱情

围城

云边有个小卖部

杀死一只知更鸟

局外人

烧纸

> 浏览全部图书标签

Process finished with exit code 0

我们在清洗一下

import requests

import re

title = re.compile('(.*?)',re.I|re.S)

trash = [' :','']

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'

}

html = requests.get('https://book.douban.com/tag/%E5%B0%8F%E8%AF%B4',headers=headers)

result = title.findall(html.text)

for r in result[:-1]:

for t in trash:

if t in r:

r=r.replace(t,'')

print(r.strip().replace('\n','').replace(' ','-'))

输出

G:\python3.8\python.exe "F:/python post/code/zengze.py"

坏小孩-----------推理之王2

活着

白夜行

小王子

解忧杂货店

红楼梦

追风筝的人

百年孤独

房思琪的初恋乐园

长夜难明-----------推理之王3

嫌疑人X的献身

平凡的世界(全三部)

1984

月亮与六便士

霍乱时期的爱情

围城

云边有个小卖部

杀死一只知更鸟

局外人

烧纸

Process finished with exit code 0

然后还是match 和 search

title = 'sgyicunyiye8'

result = re.compile('\w{9}\d')

print(result.search(title).group())

输出

yicunyiye8

但是我们用match就要报错,因为match是从头开始匹配的

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

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

    一.基础语法 1.1 语法速查 1.2 最简单的正则匹配 学习正则一般是从 match 和 search 函数开始,推荐教程. match match(pattern, string) 函数会从字符串 ...

  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. Golang 本地帮助文档
  2. 运行个Hello Word也能出Bug?Python、Java、C++等16种语言中枪,最严重可导致文件丢失...
  3. python输入三角形三边处理成三个实数_Python之路:(三)数据处理
  4. Aix 6.1下安装Oracle11g详细文档
  5. java 日期的工具类_java 日期时间工具类
  6. 推荐我看过的几本好书给大家!(2)
  7. vue路由的钩子函数有哪些?都做了哪些事情?
  8. LeetCode 957. N 天后的牢房(查找循环节)
  9. CountDownLatch详解
  10. openjudge 7622 求排列的逆序数(归并)
  11. npy文件转图像并显示
  12. 最全Java后端技术栈
  13. 基于Socket编程的网络聊天室
  14. c 语言万年历 节日查询,C语言 程序设计 节日查询和任务提醒系统万年历.doc
  15. 教你一个免费白嫖域名的方法
  16. 解决小米手机用Android studio安装不了app的问题
  17. Debian之安装完成后找不到命令解决办法
  18. 查看android系统版本号
  19. js 中的构造函数,构造函数作用,构造函数和普通函数的区别
  20. python3多线程异步爬虫_python 多线程爬虫问题

热门文章

  1. 学生籍贯管理系统说明书
  2. 计算机应用能力考试报哪个模块好,计算机应用能力考试模块介绍
  3. halcon算法思路_halcon常用算法
  4. Deepin Linux 下安装 Qt
  5. location.search是什么意思?怎么用?
  6. IDEA中打开新项目maven配置变成默认——解决方案
  7. c++ boost库学习boost::any用法
  8. any在mysql语句中用法_SQL 中ANY和ALL的用法
  9. STM32F4_定时器精讲(TIM)
  10. strtotime用法