正则表达式不匹配字符串的某些片段
本文关键字:片段 不匹配 字符串 正则表达式 | 更新日期: 2023-09-27 18:16:24
这是不是关于操作HTML的问题。在我之前的帖子中没有明确说明,所以我遵循建议并重新发布。
我有一个很长的字符串,为了可视化起见,它可以显示为XML。我正在尝试操作代码块。此外,问题还包含了关于我在构建模式时如何计算的步骤列表。这个问题也是关于我哪里错了。
我正在尝试使用以下代码匹配具有特定名称的标签并"忽略"它们。
foreach (string ignoree in ignorees)
{
Regex regex = new Regex("<" + ignoree + "[^>]*>.+</" + ignoree + ">");
text = regex.Replace(text, "&");
}
除了对简单的标签有效,但对复杂的标签不起作用,比如有子标签的标签。至少我认为这是问题的标志,就我所见。
我猜这和其中一个子标签的下颚有关,但是我怎么也看不出有什么问题。
正则表达式如下:
- 选择start-jaws后跟标签名称
- 贪婪地匹配它,一些或没有字符不是end-jaws
- 当找到end-jaws时,贪婪地匹配至少一个字符
- 当发现end-jaws后跟start-jaws时,匹配标签名称
- 与端颚匹配
问题是我可以匹配cc标签,但不匹配dd标签。
<aa>
<bb>
<cc>c</cc>
<dd>
<ee>e</ee>
</dd>
</bb>
<bb>
<cc>c</cc>
<dd>
<ee>e</ee>
</dd>
</bb>
</aa>
<aa>
<bb>
&
<dd>
<ee>e</ee>
</dd>
</bb>
<bb>
&
<dd>
<ee>e</ee>
</dd>
</bb>
</aa>
如果使用延迟匹配会发生什么?
Regex regex = new Regex("<" + ignoree + "[^>]*>.*?</" + ignoree + ">");
此外,您是否使用多行匹配?
如果运行以下代码:
string text = "<aa><bb><cc>c</cc><dd><ee>e</ee></dd></bb><bb><cc>c</cc><dd><ee>e</ee></dd></bb></aa> and <aa><bb>&<dd><ee>e</ee></dd></bb><bb>&<dd><ee>e</ee></dd></bb></aa>";
foreach(string ignoree in new string[] {"dd","cc"}) {
Regex regex = new Regex("<" + ignoree + "[^>]*?>.*?</" + ignoree + ">");
text = regex.Replace(text, "&");
}
Console.WriteLine(text);
结果是(格式化,缩进不是结果的一部分):
<aa>
<bb>&&</bb>
<bb>&&</bb>
</aa>
and
<aa>
<bb>&&</bb>
<bb>&&</bb>
</aa>