正則python
1. python的正則表達式怎麼用
在ipython中測試一下代碼:(讀入一個圖片文件的地址字元串)
?
1
2
3
4
5
6
7
8
9
10
11
12
a = input("input a:\n")
print "the input method: ",a
b = raw_input("input b:\n")
print "the raw_input method: ",b
input a:
'/home/sunny/caffe-master/examples/images/cat.jpg'
the input method: /home/sunny/caffe-master/examples/images/cat.jpg
input b:
'/home/sunny/caffe-master/examples/images/cat.jpg'
the raw_input method: '/home/sunny/caffe-master/examples/images/cat.jpg'
另外,對於兩種輸入方式另一個直觀區別就是input自帶運算處理功能,也就是輸入算式的話會直接輸出結果,而raw_input會原汁原味(raw)地輸出:
?
1
2
3
4
#! -*- coding:utf-8 -*-
print raw_input(u'測試raw_input:\n')
print input(u'測試input:\n')
2. python正則表達式是什麼
python正則表達式是使用單個字元串來描述、匹配某個句法規則的字元串,常被用來檢索、替換那些符合某個模式(規則)的文本。最初的正則表達式出現於理論計算機科學的自動控制理論和形式化語言理論中。
1950 年,數學家斯蒂芬·科爾·克萊尼利用稱之為「正則集合」的數學符號來描述此模型。肯·湯普遜將此符號系統引入編輯器 QED,隨後是 UNIX 上的編輯器 ed,並最終引入 grep。自此以後,正則表達式被廣泛地應用於各種 UNIX 或類 UNIX 系統的工具中。目前,許多程序設計語言都支持利用正則表達式進行字元串操作。
正則表達式常用的特殊字元:
:將下一個字元標記為一個特殊字元、一個原義字元(Identity Escape,有 "^" "$" "(" ")" "*" "+" "{" "|" 共計12個)、一個向後引用(backreferences)或一個八進制轉義符。例如「n」匹配字元「n」,「 」匹配一個換行符,「\」匹配「」,「(」則匹配「(」。
^:匹配輸入字元串的開始位置。如果設置了正則表達式的多行屬性,「^」也可以匹配「 」或「 」之 後的位置。
[a-z]:字元范圍,匹配指定范圍內的任意字元。例如「[a-z]」可以匹配「a」到「z」范圍內的任意小寫字母字元。
s:匹配任何空白字元,包括空格、製表符、換頁符等,等效於「[f v]」。注意 Unicode 正則表達式 會匹配全形空格符。
3. python中正則問題
r'(.*) are (.*?) .*'
首先,這是一個字元串,前面的一個r表示字元串為非轉義的原始字元串,讓編譯器忽略反斜杠,也就是忽略轉義字元。但是這個字元串里沒有反斜杠,所以這個r可有可無。
(.*) 第一個匹配分組,.*代表匹配除換行符之外的所有字元
(.*?)第二個匹配分組,.*?後面多個問號,代表非貪婪模式,也就是說只匹配符合條件的最少字元
後面的一個.* 沒有括弧包圍,所以不是分組,匹配效果和第一個一樣,但是不計入匹配結果中。
matchObj.group() 等同於matchObj.group(0),表示匹配到的完整文本字元
matchObj.group(1) 得到第一組匹配結果,也就是(.*)匹配到的
matchObj.group(2) 得到第二組匹配結果,也就是(.*?)匹配到的
因為只有匹配結果中只有兩組,所以填3時會報錯。
4. python 正則匹配^和$使用問題
^表示開始的意思。$表示結尾。match這個東西很奇怪。它是從開始做匹配的。 通常我會使用search而不是用match。 findall也是用search的機制。因為它是findall所以,就不可能用^作為字元串開頭。因為字元串只有一個開頭,但是有很多的」電話號碼「。同樣一個字元串也只有一個結尾 。你如果有結尾也不合適。
5. python中的正則表達式中的 "|"
Python中re.findall()函數是要求正則表達式在捕獲第0組數據時,要在正則表達式上加小括弧才能捕獲.
也就是說如果你要獲取整個正則表達式匹配的數據(你這里是電子郵箱地址),需要在正則表達式外面加小括弧,
然後取第0捕獲組的數據(你這里是[x[0] for x in zhengze]),
因為findall函數把每一個匹配的多個捕獲組(就是你正則表達式中的小括弧中)的數據放到一個元組里,所以要用for循環把第0捕獲組的數據取出來.
具體程序改進如下
>>>zhengze=re.findall("([A-Za-z0-9]+@(163|qq|gmail).com)",txt)
>>>[x[0]forxinzhengze]
結果就是你要的郵箱列表了.
6. python正則表達式
group和groups是兩個不同的函數。
一般,m.group(N) 返回第N組括弧匹配的字元。
而m.group() == m.group(0) == 所有匹配的字元,與括弧無關,這個是API規定的。
m.groups() 返回所有括弧匹配的字元,以tuple格式。
m.groups() == (m.group(0), m.group(1), ...)
對你給的例子:
m = re.match("([abc])+", "abc")
你的+號在括弧外面。括弧最多匹配到一個字元,要麼是a, 要麼是c,這個python引擎匹配的是末尾的c。
而m.group() == m.group(0) 這個返回的是整個匹配的字元串"abc".
關於捕獲型括弧在正則表達式里的用法,參見相關文檔。
參見http://..com/link?url=CltRBzI_-_jFl88a
7. python 正則
p = re.compile(r'<th class="subject new">(.*?)</th>',re.S)
不要繼續問為什麼, 去查python手冊.
還有一個小提示,不建議用str作變數名, 因為str是python內建的一個類
8. python 正則表達式
按照你的要求編寫的程序如下
importre
s='[有效信息]ab[abd]ab[abe]ab[abf]'
regex=r'[有效信息](ab[[a-z]+])+'
result=re.match(regex,s)
ifresult:
print(result.group())
else:
print("NoMatch!")
源代碼(注意源代碼的縮進)
9. python 正則表達式.* 是什麼意思 詳細解釋
分開來說:
1、. 匹配任意除換行符「\n」外的字元;
2、*表示匹配前一個字元0次或無限次;
3、+或*後跟?表示非貪婪匹配,即盡可能少的匹配,如*?重復任意次,但盡可能少重復;
4、 .*? 表示匹配任意數量的重復,但是在能使整個匹配成功的前提下使用最少的重復。
如:a.*?b匹配最短的,以a開始,以b結束的字元串。如果把它應用於aabab的話,它會匹配aab和ab。