1. 程式人生 > >python3實現正則表示式平衡組

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