正则表达式用尖括号替换方括号
我有一个字符串:
[ab="c" d="e"]Some multi line text[/a]
现在部分d="e"
是可选的。 我想将这种类型的字符串转换为:
Some multi line text
b
和b
的值是不变的,所以我不需要捕捉它们。 我只需要c
, e
的值和text between the tags
并创建一个等效的基于xml的表达式。 那么怎么做呢,因为还有一些可选部分。
对于HTML标记,请使用HTML解析器。
对于[a] [/ a],你可以这样做
Match m=Regex.Match(@"[ab=""c"" d=""e""]Some multi line text[/a]", @"\[ab=""([^""]+)"" 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 = @"[ab=""[[[[c]]]]"" d=""e[]""]Some multi line text[/a]"; string resultStr=Regex.Replace(inputStr, @"\[a( b=""[^""]+"")( d=""[^""]+"")?\](.*?)\[/a\]", @"$3", RegexOptions.Multiline);
如果您实际上正在考虑使用正则表达式处理(伪)-HTML,
别
SO充满了针对HTML / XML提出正则表达式的post,并且答案指出了为什么这是一个坏主意。
假设你的多行文字(“可以是任何东西”)包含
[ab="foo" [ab="bar"]]
正则表达式无法检测到这一点。
请参阅以下经典答案: RegEx匹配开放标记,但XHTML自包含标记除外
其中有:
我认为现在是时候退出助理不要使用正则表达式官员解析HTML的post了。 无论我们多少次说出来,他们都不会每天都停下来……甚至每小时一次。 这是一个失败的原因,其他人可以争取一点。 所以继续,用正则表达式解析HTML,如果必须的话。 它只是破碎的代码,而不是生与死。 – bobince
认真。 查找XML或HTML DOM并使用您的数据填充它。 然后序列化它。 这将解决你甚至不知道自己遇到的所有问题。
some multiline text
包含[
和]
吗? 如果没有,你可以使用string.replace替换[
with <
和]
with >
- 不需要正则表达式。
更新:如果它可以是[/a]
,则可以替换
^\[a([^\]]+)](.*?)\[/a]$
同
$2
我没有逃脱]
和/
在正则表达式 - 如果有必要逃脱他们
^\[a([^\]]+)\](.*?)\[\/a\]$