簡體   English   中英

Python:正則表達式以提取html中任意兩個標簽之間的文本

[英]Python: Regular expression to extract text between any two tags in a html

我嘗試在HTML文件上使用"<.+>\\s*(.*?)\\s*<\\/?.+>" 以下是我使用的Python代碼

import re

def recursiveExtractor(content):
    re1='(<.+>\s*(.+?)\s*<\/?.+>)'
    m = re.findall(re1,content)
    if m:
        for (id,item) in enumerate(m):
            text=m[id][1]
            if text:print text,"\n"

f = """
<div class='a'>
      <div class='b'>
        <div class='c'>
            <button>text1</button>
            <div class='d'>text2</div>
        </div>
      </div>
    </div>
"""
recursiveExtractor(f)

但是它會跳過一些文本,因為HTML是嵌套的,而regex從匹配部分的末尾重新開始搜索。

對於上述輸入,輸出為

<div class='b'>

<div class='d'>text2</div>

</div>

但是預期的輸出是:

text1

text2

編輯:我讀到HTML不是常規語言,因此無法解析。據我了解,無法解析。*(即使用相同的結束標記)。 但是我需要的是任何標簽之間的文本,例如text1 text2 text3所以我可以使用“ text1”,“ text2”,“ text3”的列表

為什么不這樣做:

import re

f = """
<div class='a'>
      <div class='b'>
        <div class='c'>
            <button>text1</button>
            <div class='d'>text2</div>
        </div>
      </div>
    </div>
"""
x = re.sub('<[^>]*>', '', f)  # you can also use re.sub('<[A-Za-z\/][^>]*>', '', f)

print '\n'.join(x.split())

這將具有以下輸出:

text1
text2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM