2017-08-09 107 views
0

什麼是正確的正則表達式構造(.NET風格)從HTML樣式字符串中提取屬性/值對,而忽略HTML實體如何使用正則表達式解析HTML STYLE屬性?

margin-top:0pt;margin:0;color:#000000;margin-left:0;font-size:26pt;margin-bottom:3pt;line-height:1.15;page-break-after:avoid;font-family:"Arial";orphans:2;widows:2;text-align:left;margin-right:0 

分割上;,然後:將是最簡單的,但作爲HTML實體包含分號,這打破了一些字符串。例如,實體可以存在於font-family樣式屬性中。

font-family:"Arial"; 

風格串分離(無style=")和單線。

最終我會在這個安排中對它們進行正則表達式分組;

match:( 
    group:(style-attribute-name) 
    group:(style-attribute-value) 
    ) 

通過組以創建一個字典迭代(重複鍵得到更換)。

我現在的正則表達式看起來像這 -

\s*(?<attr>[^:\s]*)\s*:\s*(?<val>[^;]*)[;]\s* 
在錯配

和結果,當它擊中的HTML實體。

enter image description here

+1

@ThomasMoors他不想在這裏解析HTML ...只是一個屬性列表。不要每次鏈接此評論「HTML」和「正則表達式」都在同一句話中。 – Gawil

+0

據我所知,所有的HTML實體都以'&'開始並以';'結尾,我錯了嗎?我們可以使用它。 – Gawil

+0

謝謝@Gawil - 正確,但是樣式字符串分隔符也是';'。我對做基本的正則表達式非常熟悉,但我確定如何定義一種忽略實體並將其作爲樣式值內容處理的子模式。 – Memetican

回答

1

我更新了您的正則表達式,使用平衡組跳過;,此時前面有&

這裏是正則表達式:
(?<attr>[^:\s]*)\s*:\s*(?<val>(?:[^;&]*(?<html>&)?[^;&]*(?(html);(?<-html>)))+)(?:;|$)

演示here

注:我主要是從你的正則表達式陽獅集團val更換[^;]*通過(?:[^;&]*(?<html>&)?[^;&]*(?(html);(?<-html>)))+

+0

正是我所需要的 - 我認爲我以前從未見過平衡團隊建設。謝謝你的提示! – Memetican

+0

@Memetican快樂!是平衡組是一個特定於.NET風格的功能。它可以看作是一個堆棧。如果您有興趣,請閱讀本文,這非常有用:http://www.regular-expressions.info/balancing.html – Gawil

0

http://www.regextester.com https://www.mikesdotnetting.com/article/46/c-regular-expressions-cheat-sheet

這些幫助我,當我用正則表達式鬼混在學校,不要靠近我的電腦RN,所以我不能輕易把它寫爲雅:/

希望它有幫助!

+0

感謝Dom,好東西。我已經構建了一個很好的正則表達式測試器,可以讓我很好地詮釋.NET變體。我不知道的部分是如何讓它識別HTML實體,並簡單地將它們吸收到VAL組中而不會被分號殺死。 – Memetican