簡體   English   中英

正則表達式用尖括號替換方括號

[英]Regular expression to replace square brackets with angle brackets

我有一個像這樣的字符串:

[a b="c" d="e"]Some multi line text[/a]

現在,部分d="e"是可選的。 我想將這種類型的字符串轉換為:

<a b="c" d="e">Some multi line text</a>

a bd是恆定的,所以我並不需要趕上他們。 我只需要ce的值以及text between the tags並創建一個基於xml的等效表達式。 那么該怎么做,因為也有一些可選部分。

如果您實際上正在考慮使用正則表達式處理(偽)HTML,

SO充滿了為HTML / XML提出正則表達式的帖子,並指出了為什么這是一個壞主意的答案。

假設您的多行文字(“可以是任何東西”)包含

[a b="foo" [a b="bar"]]

正則表達式無法檢測到這一點。

請參見以下文章中的經典答案: RegEx匹配除XHTML自包含標簽之外的其他打開標簽

其中有:

我認為現在是時候該退出助手不與Regex Officer解析HTML的職位了。 不管我們說多少次,他們都不會每天甚至每小時都停止。 這是一個失敗的事業,別人可以為之奮斗。 因此,如有必要,請繼續使用正則表達式解析HTML。 這只是斷碼,不是生與死。 – bobince

說真的 查找一個XML或HTML DOM並用您的數據填充它。 然后序列化它。 這樣可以解決您甚至不知道遇到的所有問題。

some multiline text包含[]嗎? 如果沒有,你可以替換[<]>使用與string.replace -無需正則表達式。

更新:如果不是[/a] ,則可以替換

^\[a([^\]]+)](.*?)\[/a]$

<a$1>$2</a>

我沒有逃脫]/在正則表達式中-如有必要,請逃避它們

^\[a([^\]]+)\](.*?)\[\/a\]$

對於HTML標記,請使用HTML解析器。

對於[a] [/ a],您可以執行以下操作

Match m=Regex.Match(@"[a b=""c"" d=""e""]Some multi line text[/a]", 
                    @"\[a b=""([^""]+)"" d=""([^""]+)""\](.*?)\[/a\]",
                    RegexOptions.Multiline);

m.Groups[1].Value
"c"
m.Groups[2].Value
"e"
m.Groups[3].Value
"Some multi line text"

這是Regex.Replace(雖然我不是那樣喜歡)

string inputStr = @"[a b=""[[[[c]]]]"" d=""e[]""]Some multi line text[/a]";
string resultStr=Regex.Replace(inputStr,
                            @"\[a( b=""[^""]+"")( d=""[^""]+"")?\](.*?)\[/a\]",
                            @"<a$1$2>$3</a>", 
                            RegexOptions.Multiline);

暫無
暫無

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

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