python3實現正則表示式平衡組
最近遇到一個需求,要獲得一個網頁上一個div裡所有的內容。理所當然的使用正則表示式,但是python是不支援正則平衡組的。所以只能自己寫程式碼實現了。程式碼如下:
import re
'''
堆疊方式,迴圈查詢標籤名稱
'''
def loopTab(tagName,content):
#需要匹配的標籤名稱
tagBegin = "<"+tagName
tagEnd = "</"+tagName
tagRegex = r"("+tagBegin+"|"+tagEnd+")"
#標籤名稱的數量決定著,匹配的結尾在哪裡
#遇到開頭標籤,就加一,遇到結尾標籤就減一
#直到減到0的時候就是結束的時候
tagNum = 0;
pattern = re.compile(tagRegex,re.M|re.S)
mather = pattern.search(content)
#迴圈匹配開頭標籤和結尾標籤
while mather:
group = mather.group()
if group == tagBegin:
#開頭標籤,數量加1
tagNum = tagNum + 1
else:
#結尾標籤,數量減1
tagNum = tagNum - 1
#標籤數量為0,迴圈結束,範圍結尾處的下標。
if tagNum == 0:
return mather.span()[1] + 2
#下一次迴圈
mather = pattern.search(content,mather.span()[1])
#如果標籤不匹配,返回0。
return 0;
'''
平衡組查詢
'''
def balenceGroup(regexHead,text):
#解析標籤名稱
tabName = re.compile(r"<(.+?)\s" ,re.S).search(regexHead).group(1)
#使用貪婪模式,儘可能多的找到內容,然後從找到的內容中篩選
regex = regexHead + ".*</"+tabName+">"
mather = re.compile(regex,re.M|re.S).search(text)
if mather:
divContent = mather.group()
return divContent[:loopTab(tabName,divContent)]
return ""
text = ''' <div id="1">
<div id="2">
<div id="3">
aaa
</div>
</div>
<div id="4">
bbb
</div>
</div>
<div id="5">
ccc
</div>
'''
regex = r"<div id=\"1\">"
result = balenceGroup(regex,text)
print(result)
輸出結果如下:
<div id="1">
<div id="2">
<div id="3">
aaa
</div>
</div>
<div id="4">
bbb
</div>
</div>
[Finished in 0.1s]
相關推薦
python3實現正則表示式平衡組
最近遇到一個需求,要獲得一個網頁上一個div裡所有的內容。理所當然的使用正則表示式,但是python是不支援正則平衡組的。所以只能自己寫程式碼實現了。程式碼如下: import re ''' 堆疊方式,迴圈查詢標籤名稱 ''' def loopTab(t
提取最外層配對標籤,放棄正則表示式-平衡組
public List<string> 提取最外層配對標籤(string 字串) { List<string> html標籤 = new List<string>(); //===========
正則表示式 平衡組/遞迴匹配
平衡組用於匹配巢狀層次結構,常用於匹配HTML標籤(當HTML內容不規範,起始標籤和結束標籤數量不同時,匹配出正確配對的標籤),在此把表示式統一以\w為例。 (?'group'\w) 捕獲的分組(\w匹配到的內容)命名為group,並壓入堆疊(?'-group'\w) 捕獲
正則表示式----平衡組、捕獲組、非捕獲組
正則表示式----平衡組 請參考http://xuedong.iteye.com/blog/1117195正則表示式----捕獲組 請參考http://blog.csdn.net/lxcnn/article/details/4146148正則表示式----非捕獲組 請參考ht
正則表示式——捕獲組和反向引用
正則表示式的捕獲組和反向引用: 使用小括號指定一個子表示式後,匹配這個子表示式的文字(也就是此分組捕獲的內容)可以在表示式或其他程式中作進一步處理。預設情況下,每個分組會自動擁有一個組號,規則是:從左向右,以分組的左括號為標誌,第一個出現的分組的組號為1,第二
C語言用regcomp、regexec、regfree和regerror函式實現正則表示式校驗
前言 首先,祝大家國慶假期玩的嗨皮!可能有的人已經在回家的路上了,是不是都看不到我的真摯祝福了? C語言對於一些東西的封裝比較少,比如正則表示式,但速度快一直使它立於不敗之地,今天就要介紹如何用C封裝。 一、正則表示式 1、介紹 應該都聽過正則吧?主要應用在字
【Leetcode】Python實現正則表示式匹配
給定一個字串 (s) 和一個字元模式 (p)。實現支援 ‘.’ 和 ‘*’ 的正則表示式匹配。 ‘.’ 匹配任意單個字元。 ‘*’ 匹配零個或多個前面的元素。 匹配應該覆蓋整個字串 (s) ,而不
用python3.x正則表示式匹配中文字串
re.match('^[\u4e00-\u9fa5|,。;?]+\?$','你好哈人日你,媽我。我?;們我為啥說在張志這?') 這演示了簡體,繁體,中文標點符號等等。可以看出python3.x對於中文字串匹配是可以執行得很好滴<pre name="code" cla
Python3中正則表示式使用方法(崔慶才)
正則表示式 本節我們看一下正則表示式的相關用法,正則表示式是處理字串的強大的工具,它有自己特定的語法結構,有了它,實現字串的檢索、替換、匹配驗證都不在話下。 當然對於爬蟲來說,有了它,我們從HTML裡面提取我們想要的資訊就非常方便了。
python3爬蟲——正則表示式re詳解(1)
(一)什麼是正則表示式 還早呢過這表示式是對字串操作的一種邏輯公式,就是用實現定義好的一些特定的字元,及這些特定的字元的組合,組成一個“規則字串”,這個“規則字串”用來表達對字串的一種過濾邏輯 ps:正則表示式非python獨有,使用re模組即可實現 (二
python3.6-正則表示式(附錄詳細用法)
正則表示式1:python使用re模組來實現正則表示式,方法如下: (1)正則表示式也有所謂的萬用字元,這裡是使用點號(.),它可以匹配除了換行符以外的任何字元: 匹配到了字串中的'I'字元 這裡點號(.)就匹配到了'e',然後正則表
python3的正則表示式(regex)
正則表示式提供了一種緊湊的表示法,可用於表示字串的組合,一個單獨的正則表示式可以表示無限數量的字串。常用的5種用途:分析、搜尋、搜尋與替代、字串的分割、驗證。 (一)正則表示式語言python中特殊字元有 \.^$?+*{}[]()|1、字元類速記^ 如果在字元類中第一個字元則表示否定;-
DB2中實現正則表示式
正則表示式用於查詢和替換字串中的模式。正則表示式是用某種語法定義的,正則表示式引擎採用這種語法並將它與字串進行比較。引擎返回字串是否與語法匹配的指示;也即,該字串是否包含能夠從該語法派生的子串。此外,引擎還能夠返回匹配的子串。術語“模式(pattern)”用來表示語法
JDK7 正則表示式 捕獲組命名
jdk6之前的正則表示式不支援命名捕獲組功能,只能通過捕獲組的索引來訪問捕獲組。當正則表示式比較複雜的時候,裡面含有大量的捕獲組和非捕獲組,通過從左至右數括號來得知捕獲組的計數也是一件很煩人的事情;而且這樣做程式碼的可讀性也不好,當正則表示式需要修改的時候也會改
IOS使用第三方工具(RegexKitLite)實現正則表示式
1、在寫正則表示式時:所有的’\’都需要轉義,即:’\\’; 2、在很多JS的正則表示式可能是這樣寫,如:’/^\d{1,400}$/’,但是這樣的表示式Objective-C中並不能識別,通過實際除錯得出,應將其寫為:’ ^\\d{1,400}$’(即:去掉表示式頭和尾的’/’)
用有限自動機實現正則表示式的匹配
問題:在主串中查詢是否存在正則表示式為 abc*d?e 的匹配,下面用有限自動機的方法查詢,該正則表示式的最簡 DFA 如下 狀態轉換表如下圖所示 程式中用二維陣列定義如下 #define STATES_NUMBER 5 #define LETTER_NUMBER 5
python爬蟲系列(1):使用python3和正則表示式獲取貓眼電影排行榜資料
簡述 這次打算寫一個爬蟲系列,一邊也想好好總結鞏固學習的知識,一邊做總結筆記,方便以後回憶。這次我們使用Python3和正則表示式來爬取一個簡單html頁面資訊,就從貓眼電影的排行榜單開始吧。如果讀到這篇文章的是位大神,期望您能不吝賜教,指正錯誤,如果您是小白,咋們可以一同
Python3 re(正則表示式)
#coding=utf-8 # regular.py 正則表示式 import re # 正則模組 def regular(): data = "She is more than pretty. 520" # --- 正則 ---
在C語言中利用PCRE實現正則表示式
1. PCRE簡介 2. 正則表示式定義 3. PCRE正則表示式的定義 4. PCRE的函式簡介 5. 使用PCRE在C語言中實現正則表示式的解析 6. PCRE函式在C語言中的使用小例子 PCRE(Perl Compatible Regular Expressions即:perl語言相容正則表
c++實現正則表示式匹配
c++11之後封裝了自己的正則表示式,直接包含檔案即可使用,利用regex類宣告物件初始化正則表示式,regex expressionName (“正則表示式”);正則表示式具體語法參考這裡;regex_match()方法進行匹配,匹配成功返回1,失敗返回0;c