【发布时间】:2017-04-26 04:00:45
【问题描述】:
我有一个字符串包含具有类似模式的标记内容,如下所示:
This is a <ss type="">(example)</ss> string which <ss type="">(contains)</ss> tagged contents.
预期结果是:
This is a <ss type="example">(example)</ss> string which <ss type="contains">(contains)</ss> tagged contents.
我尝试通过RegularExpression提取标记内容列表,并提取了标记文本列表,并将标记文本放在双引号中作为type的值,并将新字符串替换为旧字符串一个。
但问题是,由于Regex.Replace(); 遵循相同的Regex 模式,它会将所有标记的内容替换为标记内容列表的最后一个元素,如下所示:
This is a <ss type="contains">(contains)</ss> string which <ss type="contains">(contains)</ss> tagged contents.
我的工作代码如下:
StringBuilder resultText= new StringBuilder(@"This is a <ss type="">(example)</ss> string which <ss type="">(contains)</ss> tagged contents.");
string overallPattern = @"<ss\stype=""([a-zA-Z]*)"">(.*?)</ss>";
List<string> matchList = new List<string>();
List<string> contentList = new List<string>();
StringBuilder sb;
Regex overallRegex = new Regex(overallPattern, RegexOptions.None);
string resultContent = resultText.ToString();
foreach (Match match in overallRegex.Matches(resultContent))
{
string matchResult = match.ToString();
matchList.Add(matchResult);
string content = matchResult.Split('(', ')')[1];
contentList.Add(content);
}
for (int j = 0; j < matchList.Count; j++)
{
sb = new StringBuilder();
sb.Append(matchList[j].Insert(10, string.Format(contentList[j])));
resultContent = Regex.Replace(resultContent, overallPattern, sb.ToString());
resultText = new StringBuilder();
resultText.Append(resultContent);
}
我的问题是:
如何按顺序将正确的标签文本放入其双引号中?
【问题讨论】:
-
你检查过你的正则表达式模式吗?我发现它不匹配任何东西
-
好吧,原因是这是一个
必须是这是一个 。我已经编辑了你的问题 -
@S.Petrosov 感谢您的努力。它匹配。实际上,该字符串来自其他带有双引号转义的地方,例如
\"。我想它和你的一样。上面的字符串只是为了演示。