python正則表達(dá)式 匹配反斜杠的操作方法
python正則表達(dá)式 匹配反斜杠
正則 需要把原始字符串不被轉(zhuǎn)義的條件下傳遞給正則模塊,正則再去轉(zhuǎn)義。
r表示r后面的字符串為原始字符串,防止計算機將 \ 理解為轉(zhuǎn)義字符。
r'^\\$' 首先按照原始字符串給到compile函數(shù) ,正則再把r'^\\$'中的\`翻譯成\
backslash='\\' print(backslash) regular_backslash=re.compile(r'^\\$') print(regular_backslash.search(regular_backslash)
金額5.00中的 . 要使用 \.來匹配 。因為正則中.匹配可以所有的字符, 需要\.表示點。
import re
#匹配日期
date_regular = re.compile(r'^(\d{4})-(\d{2})-(\d{2})$')
print(date_regular.search('2017-33-12'))
#匹配金額 比如 5 5.00等金額
money_regular = re.compile(r'^(\d{1,})\.(\d{1,})$|^(\d{1,})$')
print(money_regular.match('5.8'))
#匹配純數(shù)字
number_regular = re.compile(r'^\d{1,}$')
print(number_regular.search('5'))
PS:下面看下Python字符串和正則表達(dá)式中的反斜杠(‘\‘)問題
在Python普通字符串中
在Python中,我們用''來轉(zhuǎn)義某些普通字符,使其成為特殊字符,比如
In [1]: print('abc\ndef') # '\n'具有換行的作用
abc
defg
In [2]: print('abc\tdef') # '\t'具有制位符的作用
abc defg
我們還可以用''來轉(zhuǎn)義特殊字符,使其成為普通字符,比如
In [3]: print('abc\\tdef') # 使'\'成為一個普通的字符,沒有轉(zhuǎn)義作用
abc\tdef
In [4]: print('abc\'tdef') # 使'''成為一個普通的字符,不再需要和另一半單引號'''配對
abc'tde
所以,在python普通字符串中,我們不能以奇數(shù)個''結(jié)尾,這樣會導(dǎo)致結(jié)束的的引號轉(zhuǎn)義成一個純字符,從而使得這段字符串沒有引號來結(jié)束。
在Python原生字符串中
我們在字符串前加一個'r'來表示原生字符串,比如r'abc'。原生字符串中的特殊字符的特殊含義將會被剝奪掉,如下
In [5]: print(r'abc\ndefg') # '\n'沒有換行的作用,僅僅是一個普通的字符串 abc\ndefg In [6]: print(r'abc\tdefg') # '\t'沒有制位符的作用,僅僅是一個普通的字符串 abc\tdef
這里有一個奇怪的問題,在原生字符串中,雖然''成為了一個普通的字符串,但我們同樣不能以奇數(shù)個''字符串結(jié)尾,這是因為Python正則表達(dá)式的原因,在正則表達(dá)式中我們將會解釋這個問題。
在Python(regular express)正則表達(dá)式中
Python正則表達(dá)式中會有一些不同,正則表達(dá)式中指定了一些元字符(metacharacter),如下. ^ $ * + ? { } [ ] \ | ( )
它們都具有特殊的含義,''也屬于元字符。''既屬于Python中的特殊字符,也屬于正則中的元字符,所以使用時得非常小心。那么在正則中,''的作用是什么呢?我們看一個例子
In [7]: re.search('.', 'sd.f')
Out[7]: <_sre.SRE_Match object; span=(0, 1), match='s'>
In [8]: re.search('\.', 'sd.f')
Out[8]: <_sre.SRE_Match object; span=(2, 3), match='.'>In [9]: re.search('\n', 'sdfd\nfds') Out[9]: <_sre.SRE_Match object; span=(4, 5), match='\n'>
"""
'.'作為一個元字符,它的特殊含義是匹配任意一個字符,
而當(dāng)我們在其前面加'\'后,它的特殊含義消失了,匹配到的是'.';
而且'\'依然可以把Python中某些字符轉(zhuǎn)義成特殊字符。
"""
所以,''的作用是剝奪元字符的特殊含義,使其成為一個Python字符,所以它還是會具有在Python普通字符串中的轉(zhuǎn)義作用,比如'\n'依然表示換行。所以,''既是正則中的一個元字符,又是Python中的一個特殊字符。那么我們該如何匹配到純字符''(無任何特殊意義)?
在正則中,''的作用是把元字符轉(zhuǎn)義成Python字符串文字(a Python string literal),所以正則中的'\'其實是其實是Python字符中的'',它仍然還具有轉(zhuǎn)義作用,所以在正則中我們還得對每個''再進(jìn)行轉(zhuǎn)義一次,即'\\',這樣就可以匹配到純字符''了。看下面例子
In [10]: re.search('\\\\', 'fsd\nfds') # 目標(biāo)字符串中沒有純字符'\',所以匹配為空
In [11]: re.search('\\\\', 'fsd\\nfds')
Out[11]: <_sre.SRE_Match object; span=(3, 4), match='\\'> # Python字符串中,'\\'就是純字符'\'
在re中反復(fù)的使用'',這可能會生成大量的連續(xù)的反斜杠,從而導(dǎo)致某些字符串難以理解。解決的辦法是用Python原生字符串來書寫正則表達(dá)式,如下
In [12]: re.search(r'\\', 'fsd\\nfds') # 兩個'\\'就可以匹配到純字符'\' Out[12]: <_sre.SRE_Match object; span=(3, 4), match='\\'>
另外,當(dāng)我們用原生字符串來書寫正則表達(dá)式時,Python字符中的特殊字符依然有效,比如
In [13]: re.search(r'\n', 'fsd\nfds') Out[13]: <_sre.SRE_Match object; span=(3, 4), match='\n'> """ 在Python字符中,r'\n'僅僅表示純字符串'\n',沒有換行的作用; 在正則中,r'\n'依然還有換行的作用。 所以此時我們不能用奇數(shù)個'\'來結(jié)尾某個正則表達(dá)式,這樣導(dǎo)致結(jié)束的引號被轉(zhuǎn)義成一個純字符,無結(jié)束符號。 所以,在Python原生字符串中,我們也同樣規(guī)定不能用奇數(shù)個'\'來結(jié)尾。 """
總結(jié)
到此這篇關(guān)于Python字符串和正則表達(dá)式中的反斜杠(‘\‘)問題的文章就介紹到這了,更多相關(guān)Python字符串和正則表達(dá)式中的反斜杠(‘\‘)問題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python產(chǎn)生batch數(shù)據(jù)的操作
這篇文章主要介紹了Python產(chǎn)生batch數(shù)據(jù)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
python linecache 處理固定格式文本數(shù)據(jù)的方法
今天小編就為大家分享一篇python linecache 處理固定格式文本數(shù)據(jù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
Python實現(xiàn)自動收集參數(shù)的技巧分享
在Python中,充分利用函數(shù)參數(shù)的自動收集和靈活處理,是寫出高效且易維護(hù)代碼的關(guān)鍵之一,本文將深入研究Python函數(shù)參數(shù)的收集方式,感興趣的小伙伴可以了解下2023-12-12

