首頁 後端開發 Python教學 python中正規表示式的簡單介紹(附程式碼)

python中正規表示式的簡單介紹(附程式碼)

Sep 14, 2018 pm 05:05 PM
python

本篇文章给大家带来的内容是关于python中正则表达式的简单介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

在python中正则表达式被封装到了re模块,通过引入re模块来使用正则表达式

re模块中有很正则表达式处理函数,首先用findall函数介绍基本基本字符的含义

元字符有:.  \  *  +  ?  ^  $  |  {}  []  ()

findall函数

遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表

.  匹配任意除换行符"\n"外的字符

import re

temp=re.findall("a.c","abcdefagch")
print(temp)#['abc', 'agc']
登入後複製

* 匹配前一个字符0或多次

temp=re.findall("a*b","abcaaaaabcdefb")
print(temp)#['ab', 'aaaaab', 'b']
登入後複製

+ 匹配前一个字符1次或无限次

temp=re.findall("a+b","abcaaaaabcdefb")
print(temp)#['ab', 'aaaaab']
登入後複製

? 匹配前一个字符0次或1次

temp=re.findall("a?b","abcaaaaabcdefb")
print(temp)#['ab', 'ab', 'b']
登入後複製

^ 匹配字符串开头。在多行模式中匹配每一行的开头

temp=re.findall("^ab","abcaaaaabcdefb")
print(temp)#['ab']
登入後複製

$ 匹配字符串末尾,在多行模式中匹配每一行的末尾

temp=re.findall("ab$","abcaaaaabcdefab")
print(temp)#['ab']
登入後複製

| 或。匹配|左右表达式任意一个,从左到右匹配,如果|没有包括在()中,则它的范围是整个正则表达式

temp=re.findall("abc|def","abcdef")
print(temp)#['abc', 'def']
登入後複製

{} {m}匹配前一个字符m次,{m,n}匹配前一个字符m至n次,若省略n,则匹配m至无限次

temp=re.findall("a{3}","aabaaacaaaad")
print(temp)#['aaa', 'aaa']
temp=re.findall("a{3,5}","aaabaaaabaaaaabaaaaaa")
print(temp)#['aaa', 'aaaa', 'aaaaa', 'aaaaa']在获取了3个a后,若下一个还是a,并不会得到aaa,而是算下一个a
登入後複製

[] 字符集。对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c]。[^abc]表示取反,即非abc,所有特殊字符在字符集中都失去其原有的特殊含义。用\反斜杠转义恢复特殊字符的特殊含义。

temp=re.findall("a[bcd]e","abcdefagch")
print(temp)#[]此时bcd为b或c或d
temp=re.findall("a[a-z]c","abcdefagch")
print(temp)#['abc', 'agc']
temp=re.findall("[^a]","aaaaabcdefagch")
print(temp)#['b', 'c', 'd', 'e', 'f', 'g', 'c', 'h']
temp=re.findall("[^ab]","aaaaabcdefagch")
print(temp)#['c', 'd', 'e', 'f', 'g', 'c', 'h']a和b都不会被匹配
登入後複製

() 被括起来的表达式将作为分组,从表达式左边开始每遇到一个分组的左括号“(”,编号+1.分组表达式作为一个整体,可以后接数量词。表达式中的|仅在该组中有效。

temp=re.findall("(abc){2}a(123|456)c","abcabca456c")
print(temp)#[('abc', '456')]
temp=re.findall("(abc){2}a(123|456)c","abcabca456cbbabcabca456c")
print(temp)#[('abc', '456'), ('abc', '456')]
#这里有()的情况中,findall会将该规则的每个()中匹配到的字符创放到一个元组中
登入後複製

要想看到被完全匹配的内容,我们可以使用一个新的函数search函数

search函数

在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None

temp=re.search("(abc){2}a(123|456)c","abcabca456c")
print(temp)#<re.Match object; span=(0, 11), match=&#39;abcabca456c&#39;>
print(temp.group())#abcabca456c
登入後複製

\ 转义字符,使后一个字符改变原来的意思

反斜杠后边跟元字符去除特殊功能;(即将特殊字符转义成普通字符)

temp=re.search("a\$","abcabca456ca$")
print(temp)#<<re.Match object; span=(11, 13), match=&#39;a$&#39;>
print(temp.group())#a$
登入後複製

引用序号对应的字组所匹配的字符串。

即下面的\2为前边第二个括号中的内容,2代表第几个,从1开始

a=re.search(r&#39;(abc)(def)gh\2&#39;,&#39;abcdefghabc abcdefghdef&#39;).group()
print(a)#abcdefghdef
登入後複製

反斜杠后边跟普通字符实现特殊功能;(即预定义字符)  

预定义字符有:\d \D \s \S \w \W \A \Z \b \B

预定义字符在字符集中仍有作用

\d 数字:[0-9]

temp=re.search("a\d+b","aaa234bbb")
print(temp.group())#a234b
登入後複製

\D 非数字:[^\d]

\s 匹配任何空白字符:[<空格>\t\r\n\f\v]

temp=re.search("a\s+b","aaa   bbb")
print(temp.group())#a   b
登入後複製

\S 非空白字符:[^\s]

\w 匹配包括下划线在内的任何字字符:[A-Za-z0-9_]

\W 匹配非字母字符,即匹配特殊字符

temp=re.search("\W","$")
print(temp.group())#$
登入後複製

\A 仅匹配字符串开头,同^

\Z 仅匹配字符串结尾,同$

\b 匹配\w和\W之间的边界

temp=re.search(r"\bas\b","a as$d")
print(temp.group())#$as
登入後複製

\B [^\b]

下面介绍其他的re常用函数

compile函数

编译正则表达式模式,返回一个对象的模式

rule = re.compile("abc\d+\w")
str = "aaaabc6def"
temp = rule.findall(str)
print(temp)#[&#39;abc6d&#39;]
登入後複製

match函数

在字符串刚开始的位置匹配,和^功能相同

temp=re.match("asd","asdfasd")
print(temp.group())#asd
登入後複製

finditer函数

将所有匹配到的字符串以match对象的形式按顺序放到一个迭代器中返回

temp=re.finditer("\d+","as11d22f33a44sd")
print(temp)#<callable_iterator object at 0x00000242EEEE9E48>
for i in temp:
    print(i.group())
#11
#22
#33
#44
登入後複製

split函数

用于分割字符串,将分割后的字符串放到一个列表中返回

如果在字符串的首或尾分割,将会出现一个空字符串

temp=re.split("\d+","as11d22f33a44sd55")
print(temp)#[&#39;as&#39;, &#39;d&#39;, &#39;f&#39;, &#39;a&#39;, &#39;sd&#39;, &#39;&#39;]
登入後複製

使用字符集分割

如下先以a分割,再将分割后的字符串们以b分割,所以会出现3个空字符串

temp=re.split("[ab]","ab123b456ba789b0")
print(temp)#[&#39;&#39;, &#39;&#39;, &#39;123&#39;, &#39;456&#39;, &#39;&#39;, &#39;789&#39;, &#39;0&#39;]
登入後複製

sub函数 

将re匹配到的部分进行替换再返回新的字符串

temp=re.sub("\d+","_","ab123b456ba789b0")
print(temp)#ab_b_ba_b_
登入後複製

后边还可以再加一个参数表示替换次数,默认为0表示全替换

subn函数

将re匹配到的部分进行替换再返回一个装有新字符串和替换次数的元组

temp=re.subn("\d+","_","ab123b456ba789b0")
print(temp)#(&#39;ab_b_ba_b_&#39;, 4)
登入後複製

然后讲一下特殊分组

temp=re.search("(?P<number>\d+)(?P<letter>[a-zA-Z])","ab123b456ba789b0")
print(temp.group("number"))#123
print(temp.group("letter"))#b
登入後複製

以?P的形式起名

最后说一下惰性匹配和贪婪匹配

temp=re.search("\d+","123456")
print(temp.group())#123456
登入後複製

此时为贪婪匹配,即只要符合就匹配到底

temp=re.search("\d+?","123456")
print(temp.group())#1
登入後複製

在后面加一个?变为惰性匹配,即只要匹配成功一个字符就结束匹配 

 相关推荐:

Python正则表达式介绍

php正则表达式匹配中文字符的简单代码实例

以上是python中正規表示式的簡單介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1250
24
PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

sublime怎麼運行代碼python sublime怎麼運行代碼python Apr 16, 2025 am 08:48 AM

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

Golang vs. Python:性能和可伸縮性 Golang vs. Python:性能和可伸縮性 Apr 19, 2025 am 12:18 AM

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

vscode在哪寫代碼 vscode在哪寫代碼 Apr 15, 2025 pm 09:54 PM

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

See all articles