Python 高級(jí) 8正則表達(dá)式

正則表達(dá)式、re模塊、匹配單個(gè)字符、匹配多個(gè)字符、匹配開頭結(jié)尾、匹配分組、re模塊的高級(jí)用法、python貪婪和非貪婪、r的作用

1.正則表達(dá)式的介紹

在實(shí)際開發(fā)過程中經(jīng)常會(huì)有查找符合某些復(fù)雜規(guī)則的字符串的需要,比如:郵箱、圖片地址、手機(jī)號(hào)碼等,這時(shí)候想匹配或者查找符合某些規(guī)則的字符串就可以使用正則表達(dá)式了。

<1>正則表達(dá)式概念

正則表達(dá)式(pattern)就是記錄文本規(guī)則的代碼

<2>正則表達(dá)式的樣子

0\d{2}-\d{8} 這個(gè)就是一個(gè)正則表達(dá)式,表達(dá)的意思是匹配的是座機(jī)號(hào)碼

<3>正則表達(dá)式的特點(diǎn)

? 正則表達(dá)式的語法很令人頭疼,可讀性差

? 正則表達(dá)式通用行很強(qiáng),能夠適用于很多編程語言

小結(jié)

正則表達(dá)式是匹配或者查找符合某些規(guī)則的字符串?dāng)?shù)據(jù)

2.re模塊介紹

<1>re模塊的使用過程

在Python中需要通過正則表達(dá)式對(duì)字符串進(jìn)行匹配的時(shí)候,可以使用一個(gè)模塊,名字為re

\ 轉(zhuǎn)義符

? ? # 導(dǎo)入re模塊

? ? import re

? ? # 使用match方法進(jìn)行匹配操作

? ? result = re.match(正則表達(dá)式,要匹配的字符串)

? ? # 如果上一步匹配到數(shù)據(jù)的話,可以使用group方法來提取數(shù)據(jù)

# pattern: 正則表達(dá)式

# str: 匹配的字符串

# 根據(jù)正則表達(dá)式在指定字符串中從頭匹配數(shù)據(jù),如果匹配成功返回一個(gè)匹配結(jié)果對(duì)象,匹配失敗返回None對(duì)象

result.group()

3.匹配單個(gè)字符

在上一小節(jié)中,了解到通過re模塊能夠完成使用正則表達(dá)式來匹配字符串

本小節(jié),將要講解正則表達(dá)式的單字符匹配

代碼 功能

. 匹配任意1個(gè)字符(除了\n)

[ ] 匹配[ ]中列舉的字符

\d 匹配數(shù)字,即0-9

\D 匹配非數(shù)字,即不是數(shù)字

\s 匹配空白,即 空格,tab鍵

\S 匹配非空白

\w 匹配非特殊字符,即a-z、A-Z、0-9、_、漢字

\W 匹配特殊字符,即非字母、非數(shù)字、非漢字

[^內(nèi)容] 除了^后的內(nèi)容都匹配,可以是一個(gè)或者多個(gè)內(nèi)容

<1>示例1: .

#coding=utf-8

import re

ret = re.match(".","M")

print(ret.group())

ret = re.match("t.o","too")

print(ret.group())

ret = re.match("t.o","two")

print(ret.group())

運(yùn)行結(jié)果:

M

too

two

<2>示例2:[]

import re

# 如果hello的首字符小寫,那么正則表達(dá)式需要小寫的h

ret = re.match("h","hello Python")

print(ret.group())

# 如果hello的首字符大寫,那么正則表達(dá)式需要大寫的H

ret = re.match("H","Hello Python")

print(ret.group())

# 大小寫h都可以的情況

ret = re.match("[hH]","hello Python")

print(ret.group())

ret = re.match("[hH]","Hello Python")

print(ret.group())

ret = re.match("[hH]ello Python","Hello Python")

print(ret.group())

# 匹配0到9第一種寫法

ret = re.match("[0123456789]Hello Python","7Hello Python")

print(ret.group())

# 匹配0到9第二種寫法

ret = re.match("[0-9]Hello Python","7Hello Python")

print(ret.group())

ret = re.match("[0-35-9]Hello Python","7Hello Python")

print(ret.group())

# 下面這個(gè)正則不能夠匹配到數(shù)字4,因此ret為None

ret = re.match("[0-35-9]Hello Python","4Hello Python")

# print(ret.group())

運(yùn)行結(jié)果:

h

H

h

H

Hello Python

7Hello Python

7Hello Python

7Hello Python

<3>示例3:\d

import re

# 普通的匹配方式

ret = re.match("嫦娥1號(hào)","嫦娥1號(hào)發(fā)射成功")

print(ret.group())

ret = re.match("嫦娥2號(hào)","嫦娥2號(hào)發(fā)射成功")

print(ret.group())

ret = re.match("嫦娥3號(hào)","嫦娥3號(hào)發(fā)射成功")

print(ret.group())

# 使用\d進(jìn)行匹配

ret = re.match("嫦娥\d號(hào)","嫦娥1號(hào)發(fā)射成功")

print(ret.group())

ret = re.match("嫦娥\d號(hào)","嫦娥2號(hào)發(fā)射成功")

print(ret.group())

ret = re.match("嫦娥\d號(hào)","嫦娥3號(hào)發(fā)射成功")

print(ret.group())

運(yùn)行結(jié)果:

嫦娥1號(hào)

嫦娥2號(hào)

嫦娥3號(hào)

嫦娥1號(hào)

嫦娥2號(hào)

嫦娥3號(hào)

<4>示例4:\D

import re

match_obj = re.match("\D", "f")

if match_obj:

? ? # 獲取匹配結(jié)果

? ? print(match_obj.group())

else:

? ? print("匹配失敗")

運(yùn)行結(jié)果:

f

<5>示例5:\s

import re

# 空格屬于空白字符

match_obj = re.match("hello\sworld", "hello world")

if match_obj:

? ? result = match_obj.group()

? ? print(result)

else:

? ? print("匹配失敗")

# \t 屬于空白字符

match_obj = re.match("hello\sworld", "hello\tworld")

if match_obj:

? ? result = match_obj.group()

? ? print(result)

else:

? ? print("匹配失敗")

運(yùn)行結(jié)果:

hello world

hello world

<6>示例6:\S

import re

match_obj = re.match("hello\Sworld", "hello&world")

if match_obj:

result = match_obj.group()

print(result)

else:

print("匹配失敗")

match_obj = re.match("hello\Sworld", "hello$world")

if match_obj:

result = match_obj.group()

print(result)

else:

print("匹配失敗")

運(yùn)行結(jié)果:

hello&world?

hello$world

<7>示例7:\w

import re

# 匹配非特殊字符中的一位

match_obj = re.match("\w", "A")

if match_obj:

? ? # 獲取匹配結(jié)果

? ? print(match_obj.group())

else:

? ? print("匹配失敗")

執(zhí)行結(jié)果:

A

<8>示例8:\W

# 匹配特殊字符中的一位

match_obj = re.match("\W", "&")

if match_obj:

? ? # 獲取匹配結(jié)果

? ? print(match_obj.group())

else:

? ? print("匹配失敗")

執(zhí)行結(jié)果:

&

4.匹配多個(gè)字符

匹配多個(gè)字符的相關(guān)格式

代碼 功能

* 匹配前一個(gè)字符出現(xiàn)0次或者無限次,即可有可無

+ 匹配前一個(gè)字符出現(xiàn)1次或者無限次,即至少有1次

? 匹配前一個(gè)字符出現(xiàn)1次或者0次,即要么有1次,要么沒有

{m} 匹配前一個(gè)字符出現(xiàn)m次

{m,n} 匹配前一個(gè)字符出現(xiàn)從m到n次

<1>示例1:*

需求:匹配出一個(gè)字符串第一個(gè)字母為大小字符,后面都是小寫字母并且這些小寫字母可 有可無

import re

ret = re.match("[A-Z][a-z]*","M")

print(ret.group())

ret = re.match("[A-Z][a-z]*","MnnM")

print(ret.group())

ret = re.match("[A-Z][a-z]*","Aabcdef")

print(ret.group())

運(yùn)行結(jié)果:

M

Mnn

Aabcdef

<2>示例2:+

需求:匹配一個(gè)字符串,第一個(gè)字符是t,最后一個(gè)字符串是o,中間至少有一個(gè)字符

import re

match_obj = re.match("t.+o", "two")

if match_obj:

? ? print(match_obj.group())

else:

? ? print("匹配失敗")

運(yùn)行結(jié)果:

two

<3>示例3:?

需求:匹配出這樣的數(shù)據(jù),但是https 這個(gè)s可能有,也可能是http 這個(gè)s沒有

import re

match_obj = re.match("https?", "http")

if match_obj:

? ? print(match_obj.group())

else:

? ? print("匹配失敗")

運(yùn)行結(jié)果:

https

<4>示例4:{m}、{m,n}逗號(hào)和n直接不可以有空格

需求:匹配出,8到20位的密碼,可以是大小寫英文字母、數(shù)字、下劃線

import re

ret = re.match("[a-zA-Z0-9_]{6}","12a3g45678")

print(ret.group())

ret = re.match("[a-zA-Z0-9_]{8,20}","1ad12f23s34455ff66")

print(ret.group())

運(yùn)行結(jié)果:

12a3g4

1ad12f23s34455ff66

5.匹配開頭結(jié)尾

匹配開頭和結(jié)尾的正則表達(dá)式

代碼 功能

^ 匹配字符串開頭

$ 匹配字符串結(jié)尾

<1>示例1:^

需求:匹配以數(shù)字開頭的數(shù)據(jù)

import re

# 匹配以數(shù)字開頭的數(shù)據(jù)

match_obj = re.match("^\d.*", "3hello")

if match_obj:

? ? # 獲取匹配結(jié)果

? ? print(match_obj.group())

else:

? ? print("匹配失敗")

運(yùn)行結(jié)果:

3hello

<2>示例2:$

需求: 匹配以數(shù)字結(jié)尾的數(shù)據(jù)

import re

# 匹配以數(shù)字結(jié)尾的數(shù)據(jù)

match_obj = re.match(".*\d$", "hello5")

if match_obj:

? ? # 獲取匹配結(jié)果

? ? print(match_obj.group())

else:

? ? print("匹配失敗")

運(yùn)行結(jié)果:

hello5

<3>示例3:^ 和 $

需求: 匹配以數(shù)字開頭中間內(nèi)容不管以數(shù)字結(jié)尾

match_obj = re.match("^\d.*\d$", "4hello4")

if match_obj:

? ? # 獲取匹配結(jié)果

? ? print(match_obj.group())

else:

? ? print("匹配失敗")

運(yùn)行結(jié)果:

4hello4

<4>除了指定字符以外都匹配 [^指定字符]

[^指定字符]: 表示除了指定字符都匹配

指定字符可以是一個(gè)或者多個(gè)

需求: 第一個(gè)字符除了aeiou的字符都匹配

import re

match_obj = re.match("[^aeiou]", "h")

if match_obj:

? ? # 獲取匹配結(jié)果

? ? print(match_obj.group())

else:

? ? print("匹配失敗")

執(zhí)行結(jié)果

h

6.匹配分組

匹配分組相關(guān)正則表達(dá)式

代碼 功能

| 匹配左右任意一個(gè)表達(dá)式

(ab) 將括號(hào)中字符作為一個(gè)分組

\num 引用分組num匹配到的字符串

(?P<name>) 分組起別名

(?P=name) 引用別名為name分組匹配到的字符串

<1>示例1:|

需求:在列表中["apple", "banana", "orange", "pear"],匹配apple和pear

import re

# 水果列表

fruit_list = ["apple", "banana", "orange", "pear"]

# 遍歷數(shù)據(jù)

for value in fruit_list:

? ? # |? ? 匹配左右任意一個(gè)表達(dá)式

? ? match_obj = re.match("apple|pear", value)

? ? if match_obj:

? ? ? ? print("%s是我想要的" % match_obj.group())

? ? else:

? ? ? ? print("%s不是我要的" % value)

執(zhí)行結(jié)果:

apple是我想要的

banana不是我要的

orange不是我要的

pear是我想要的

<2>示例2:( )

需求:匹配出163、126、qq等郵箱

import re

match_obj = re.match("[a-zA-Z0-9_]{4,20}@(163|126|qq|sina|yahoo)\.com", "hello@163.com")

if match_obj:

# 提示: 默認(rèn)獲取的是第0個(gè)分組,正則表達(dá)式匹配的數(shù)據(jù)

? ? print(match_obj.group())

? ? # 獲取第一個(gè)分組匹配的數(shù)據(jù)

#提示: 分組是按照從左到右一次排序的,默認(rèn)最左邊的是第一個(gè)分組

? ? print(match_obj.group(1))

else:

? ? print("匹配失敗")

執(zhí)行結(jié)果:

hello@163.com

163

需求: 匹配qq:10567這樣的數(shù)據(jù),提取出來qq文字和qq號(hào)碼

import re

match_obj = re.match("(qq):([1-9]\d{4,10})", "qq:10567")

if match_obj:

? ? print(match_obj.group())

? ? # 分組:默認(rèn)是1一個(gè)分組,多個(gè)分組從左到右依次加1

? ? print(match_obj.group(1))

? ? # 提取第二個(gè)分組數(shù)據(jù)

? ? print(match_obj.group(2))

else:

? ? print("匹配失敗")

執(zhí)行結(jié)果:

qq

10567

<3>示例3:\num

需求:匹配出<html>hh</html>

match_obj = re.match("<[a-zA-Z1-6]+>.*</[a-zA-Z1-6]+>", "<html>hh</div>")

if match_obj:

? ? print(match_obj.group())

else:

? ? print("匹配失敗")

match_obj = re.match("<([a-zA-Z1-6]+)>.*</\\1>", "<html>hh</html>")

if match_obj:

? ? print(match_obj.group())

else:

? ? print("匹配失敗")

運(yùn)行結(jié)果:

<html>hh</div>

<html>hh</html>

需求:匹配出<html><h1>www.itcast.cn</h1></html>

match_obj = re.match("<([a-zA-Z1-6]+)><([a-zA-Z1-6]+)>.*</\\2></\\1>", "<html><h1>www.itcast.cn</h1></html>")

if match_obj:

? ? print(match_obj.group())

else:

? ? print("匹配失敗")

運(yùn)行結(jié)果:

<html><h1>www.itcast.cn</h1></html>

<4>示例4:(?P<name>) (?P=name)

需求:匹配出<html><h1>www.itcast.cn</h1></html>

match_obj = re.match("<(?P<name1>[a-zA-Z1-6]+)><(?P<name2>[a-zA-Z1-6]+)>.*</(?P=name2)></(?P=name1)>", "<html><h1>www.itcast.cn</h1></html>")

if match_obj:

? ? print(match_obj.group())

else:

? ? print("匹配失敗")

運(yùn)行結(jié)果:

<html><h1>www.itcast.cn</h1></html>

小結(jié)

? (分組數(shù)據(jù)):分組數(shù)是從左到右的方式進(jìn)行分配的

7.re模塊的高級(jí)用法

目標(biāo)

? 知道使用findall查找多個(gè)字符

? 知道使用sub替換數(shù)據(jù)

? 知道使用split根據(jù)多個(gè)標(biāo)識(shí)符進(jìn)行分割數(shù)據(jù)

<1>search

需求:匹配出水果的個(gè)數(shù)

import re

# 根據(jù)正則表達(dá)式查找數(shù)據(jù),提示:只查找一次

# 1.pattern: 正則表達(dá)式

# 2.string: 要匹配的字符串

match_obj = re.search("\d+", "水果有20個(gè) 其中蘋果10個(gè)")

if match_obj:

? ? # 獲取匹配結(jié)果數(shù)據(jù)

? ? print(match_obj.group())

else:

? ? print("匹配失敗")

運(yùn)行結(jié)果:

20

<2>findall

需求:匹配出多種水果的個(gè)數(shù)

import re

# 根據(jù)正則表達(dá)式查找數(shù)據(jù),提示:可以查找多次,返回一個(gè)列表,如果沒找到返回一個(gè)空列表

# 1.pattern: 正則表達(dá)式

# 2.string: 要匹配的字符串

result = re.findall("\d+", "蘋果10個(gè) 鴨梨5個(gè) 總共15個(gè)水果")

print(result)

運(yùn)行結(jié)果:

['10', '5', '15']

<3>sub 將匹配到的數(shù)據(jù)進(jìn)行替換

需求:將匹配到的評(píng)論數(shù)改成22

import re

# pattern: 正則表達(dá)式

# repl: 替換后的字符串

# string: 要匹配的字符串

# count=0 替換次數(shù),默認(rèn)全部替換 , count=1根據(jù)指定次數(shù)替換

result = re.sub("\d+", "22", "評(píng)論數(shù):10 贊數(shù):20", count=1)

print(result)

運(yùn)行結(jié)果:

評(píng)論數(shù):22 贊數(shù):20

需求:將匹配到的閱讀數(shù)加1

import re

# match_obj:該參數(shù)系統(tǒng)自動(dòng)傳入

def add(match_obj):

? ? # 獲取匹配結(jié)果的數(shù)據(jù)

? ? value = match_obj.group()

? ? result = int(value) + 1

? ? # 返回值必須是字符串類型

? ? return str(result)

result = re.sub("\d+", add, "閱讀數(shù):10")

print(result)

運(yùn)行結(jié)果:

閱讀數(shù):11

<4>split 根據(jù)匹配進(jìn)行切割字符串,并返回一個(gè)列表

需求:切割字符串"貂蟬,楊玉環(huán):西施,王昭君"

import re

# 1. 正則

# 2. 要匹配的字符串

# maxsplit=1 分割次數(shù)1次, 默認(rèn)maxsplit=0 全部分割

result = re.split(",|:", my_str, maxsplit=1)

print(result)

運(yùn)行結(jié)果:

['貂蟬', '楊玉環(huán):西施,王昭君']

思考

使用正則表達(dá)式把職位描述信息提取出來不要html標(biāo)簽數(shù)據(jù)

<div>

<p>崗位職責(zé):</p>

<p>完成推薦算法、數(shù)據(jù)統(tǒng)計(jì)、接口、后臺(tái)等服務(wù)器端相關(guān)工作</p>

<p><br></p>

<p>必備要求:</p>

<p>良好的自我驅(qū)動(dòng)力和職業(yè)素養(yǎng),工作積極主動(dòng)、結(jié)果導(dǎo)向</p>

<p>?<br></p>

<p>技術(shù)要求:</p>

<p>1、一年以上 Python 開發(fā)經(jīng)驗(yàn),掌握面向?qū)ο蠓治龊驮O(shè)計(jì),了解設(shè)計(jì)模式</p>

<p>2、掌握HTTP協(xié)議,熟悉MVC、MVVM等概念以及相關(guān)WEB開發(fā)框架</p>

<p>3、掌握關(guān)系數(shù)據(jù)庫開發(fā)設(shè)計(jì),掌握 SQL,熟練使用 MySQL/PostgreSQL 中的一種<br></p>

<p>4、掌握NoSQL、MQ,熟練使用對(duì)應(yīng)技術(shù)解決方案</p>

<p>5、熟悉 Javascript/CSS/HTML5,JQuery、React、Vue.js</p>

<p>?<br></p>

<p>加分項(xiàng):</p>

<p>大數(shù)據(jù),數(shù)理統(tǒng)計(jì),機(jī)器學(xué)習(xí),sklearn,高性能,大并發(fā)。</p>

</div>

參考代碼:

import re

my_str = """<div>

? ? ? ? <p>【職位描述】<br>1、負(fù)責(zé)數(shù)據(jù)后臺(tái)服務(wù)的架構(gòu)設(shè)計(jì)、開發(fā)、優(yōu)化;<br><br>【任職要求】<br>1、本科以上學(xué)歷,計(jì)算機(jī)相關(guān)專業(yè);<br>2、3年以上python開發(fā)經(jīng)驗(yàn);<br>3、熟悉Unix、Linux操作系統(tǒng)原理及常用工具;<br>4、熟悉TCP/IP協(xié)議、進(jìn)程間通訊編程,熟悉Unix/Linux下常用架構(gòu)設(shè)計(jì)方法;<br>5、熟悉Mysql數(shù)據(jù)庫,熟悉NoSQL存儲(chǔ),熟悉面向?qū)ο笤O(shè)計(jì);<br>6、具備全面的軟件知識(shí)結(jié)構(gòu)認(rèn)知(操作系統(tǒng)、軟件工程、設(shè)計(jì)模式、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)庫系統(tǒng)、網(wǎng)絡(luò)安全);<br>7、具備良好的分析解決問題能力,能獨(dú)立承擔(dān)任務(wù),有系統(tǒng)進(jìn)度把控能力</p>

? ? ? ? </div>"""

# 根據(jù)正則表達(dá)式替換指定的標(biāo)簽數(shù)據(jù)

result = re.sub(r"</?[a-zA-Z1-6]+>", "", my_str)

# 去除左右空格

print(result.strip())

執(zhí)行結(jié)果:

【職位描述】1、負(fù)責(zé)數(shù)據(jù)后臺(tái)服務(wù)的架構(gòu)設(shè)計(jì)、開發(fā)、優(yōu)化;【任職要求】1、本科以上學(xué)歷,計(jì)算機(jī)相關(guān)專業(yè);2、3年以上python開發(fā)經(jīng)驗(yàn);3、熟悉Unix、Linux操作系統(tǒng)原理及常用工具;4、熟悉TCP/IP協(xié)議、進(jìn)程間通訊編程,熟悉Unix/Linux下常用架構(gòu)設(shè)計(jì)方法;5、熟悉Mysql數(shù)據(jù)庫,熟悉NoSQL存儲(chǔ),熟悉面向?qū)ο笤O(shè)計(jì);6、具備全面的軟件知識(shí)結(jié)構(gòu)認(rèn)知(操作系統(tǒng)、軟件工程、設(shè)計(jì)模式、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)庫系統(tǒng)、網(wǎng)絡(luò)安全);7、具備良好的分析解決問題能力,能獨(dú)立承擔(dān)任務(wù),有系統(tǒng)進(jìn)度把控能力

8.python貪婪和非貪婪

目標(biāo)

? 知道貪婪的特點(diǎn)

? 掌握非貪婪的使用

Python里數(shù)量詞默認(rèn)是貪婪的(在少數(shù)語言里也可能是默認(rèn)非貪婪),總是嘗試匹配盡可能多的字符;

非貪婪則相反,總是嘗試匹配盡可能少的字符。

在"*","?","+","{m,n}"后面加上?,使貪婪變成非貪婪。

非貪婪操作符“?”,這個(gè)操作符可以用在"*","+","?"的后面,這樣?前面的正則表達(dá)式不能匹配?后面正則表達(dá)式的數(shù)據(jù)

思考

請(qǐng)?zhí)崛《肤~圖片的url地址

字符串為:

<img data-original="https://rpic.douyucdn.cn/appCovers/2016/11/13/1213973_201611131917_small.jpg" src="https://rpic.douyucdn.cn/appCovers/2016/11/13/1213973_201611131917_small.jpg" style="display: inline;">

參考代碼

import re

my_str = """<img alt="小淺月o的直播" data-original="https://rpic.douyucdn.cn/live-cover/appCovers/2018/03/25/3544712_20180325111300_big.jpg" src="https://rpic.douyucdn.cn/live-cover/appCovers/2018/03/25/3544712_20180325111300_big.jpg" width="283" height="163" class="JS_listthumb" style="display: block;">"""

# python里面正則表達(dá)式默認(rèn)是貪婪的, 盡量根據(jù)正則表達(dá)式多匹配數(shù)據(jù)

# 設(shè)置成為非貪婪, 非貪婪就是根據(jù)正則表達(dá)式盡量少匹配數(shù)據(jù)

# 非貪婪的樣式: *? +? ??

# 非貪婪的含義:?后面的數(shù)據(jù)不要前面去匹配,讓?后面匹配

match_obj = re.search(r"https?://.*?\.jpg", my_str)

if match_obj:

? ? # 獲取匹配結(jié)果數(shù)據(jù)

? ? print(match_obj.group())

else:

? ? print("匹配失敗")

執(zhí)行代碼:

https://rpic.douyucdn.cn/live-cover/appCovers/2018/03/25/3544712_20180325111300_big.jpg

9.r的作用

目標(biāo)

? 知道r的作用

說明

Python中字符串前面加上 r 表示原生字符串,數(shù)據(jù)里面的反斜杠不需要進(jìn)行轉(zhuǎn)義,針對(duì)的只是反斜杠

Python里的原生字符串很好地解決了這個(gè)問題,有了原生字符串,你再也不用擔(dān)心是不是漏寫了反斜杠,寫出來的表達(dá)式也更直觀。

建議: 如果使用使用正則表達(dá)式匹配數(shù)據(jù)可以都加上r,要注意r針對(duì)的只是反斜杠起作用,不需要對(duì)其進(jìn)行轉(zhuǎn)義

>>> ret = re.match(r"c:\\a",mm).group()

>>> print(ret)

c:\a

小結(jié)

? r 表示原生字符串,數(shù)據(jù)里面的反斜杠不需要進(jìn)行轉(zhuǎn)義,針對(duì)的只是反斜杠


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,117評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,860評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,128評(píng)論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,291評(píng)論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,025評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,421評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,477評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,642評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,177評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,970評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,157評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,717評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,410評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,821評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,053評(píng)論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,896評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,157評(píng)論 2 375

推薦閱讀更多精彩內(nèi)容