我有一个字符串:
[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的等效表达式。那么怎么做呢,因为还有一些可选部分。
答案 0 :(得分:0)
如果您实际上正在考虑使用正则表达式处理(伪)-HTML,
<强>不强>
SO充满了针对HTML / XML提出正则表达式的帖子,以及指出为什么这是一个坏主意的答案。
假设你的多行文字(“可以是任何东西”)包含
[a b="foo" [a b="bar"]]
正则表达式无法检测到这一点。
请参阅以下经典答案: RegEx match open tags except XHTML self-contained tags
有:
我觉得是时候退出了 助理的帖子不要解析HTML 有正则表达官。无论多少 我们说的时候,他们不会停止 每天都来......甚至每小时一次。 这是一个失败的原因,其他人 可以争取一点。所以继续,解析 如果必须,使用正则表达式的HTML。它的 只有破碎的代码,而不是生死。 - bobince
严重。查找XML或HTML DOM并使用您的数据填充它。然后序列化它。这将解决你甚至不知道的所有问题。
答案 1 :(得分:0)
some multiline text
会包含[
和]
吗?如果没有,您只需使用[
替换<
,使用]
替换>
使用string.replace - 不需要正则表达式。
更新:
如果它可以是[/a]
以外的任何内容,则可以替换
^\[a([^\]]+)](.*?)\[/a]$
带
<a$1>$2</a>
我没有在正则表达式中转义]
和/
- 如果有必要,请逃避它们
^\[a([^\]]+)\](.*?)\[\/a\]$
答案 2 :(得分:0)
对于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);