[英]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
b
和d
是恆定的,所以我並不需要趕上他們。 我只需要c
, e
的值以及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.