[英]Regex to match attributes in HTML?
我有一個txt文件,它實際上是某些網頁的html源。 在該txt文件中,有各種字符串,前面帶有“ title =“標簽。 例如
<div id='UWTDivDomains_5_6_2_2' title='Connectivity Framework'>
我有興趣獲取文本連接框架 ,並將其寫入單獨的文件中。
像這樣,有很多這樣的標簽,每個標簽在title =“我需要提取的某些文本”后都有不同的文本,我想從html源/ txt文件中提取文本的所有此類實例,並寫入單獨的txt文件。 文本只能包含小寫字母,大寫字母和數字。 每個文本字符串的長度(以字符為單位)會有所不同。
我正在Windows中使用PowerGrep。 Powergrep允許我搜索帶有正則表達式inout的文本文件。 我嘗試將搜索用作title ='[a-zA-Z0-9]
它顯示正確的匹配項,但僅匹配字符串的第一個字符,並且僅寫入與第二個txt文件匹配的文本字符串的第一個字符,而不是所有字符串。
我希望所有字符串都匹配並寫入第二個文件。
使用powergrep,正確的正則表達式或執行我想做的事情的方法是什么?
-廣告。
我只是不確定要問多少次HTML文件的正則表達式解析問題(並使用“使用DOM解析器”的正確解決方案來回答)。 它每天都會出現。
困難是:
因此,如果您滿足所有這些要求(並且它變得非常復雜,但仍不完美的正則表達式),那么它仍然不是100%。
HTML解析器的存在是有原因的。 使用它們。
其他答案都對正則表達式進行了正確的更改,因此,我將解釋您的原始問題是什么。
方括號表示字符類別 -表示正則表達式將匹配這些括號內的任何字符。 但是,與其他所有內容一樣,默認情況下它只會匹配一次。 就像正則表達式“ s
”僅匹配“ ssss
”中的第一個字符一樣,正則表達式“ [a-zA-Z0-9]
”將僅匹配“ Connectivity Framework
”中的第一個字符。
通過添加重復 ,可以使該字符類重復匹配。 最簡單的方法是在其后添加一個星號(它將匹配0個或多個事件)。 因此,正則表達式“ [a-zA-Z0-9]
*”將連續匹配多個字符,直到找到不屬於該字符類的字符為止(在您的情況下為空格字符,因為您未包括該字符)在括號中)。
盡管正則表達式要准確地描述語法可能非常復雜-如果有人在屬性中放置非字母數字字符(例如&符)怎么辦? 您可以通過將字符集設置為“除引號字符之外的任何字符”來捕獲引號之間的所有輸入,因此“ '[^']*'
”通常可以做正確的事情。 通常,您也需要記住轉義符(例如,使用字符串'Mary\\'s lamb'
您實際上確實想捕獲中間的撇號,因此簡單的“除了撇號”的字符集不會刪減它)幸運的是,根據規范,這不是XML / HTML的問題。
盡管如此,如果有一個現有的庫可以為您提取數據,那么它可能比滾動自己的庫更快,更正確,因此,如果可能的話,我會傾向於這樣做。
我對PowerGrep不熟悉,但是您的正則表達式不完整。 嘗試這個:
title='[a-zA-Z0-9 ]*'
或更好:
title='([^']*)'
我將使用此正則表達式來獲取title屬性值
<[a-z]+[^>]*\s+title\s*=\s*("[^"]*"|'[^']*'|[^\s >]*)
請注意,此正則表達式將屬性值表達式與引號匹配。 因此,如果需要,您必須將其刪除。
這是您需要的正則表達式
title='([a-zA-Z0-9]+)'
但是如果您打算做更多這樣的事情,使用解析器可能會使它更加健壯和有用。
嘗試以下方法:
title=\'[a-zA-Z0-9]*\'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.