我在(html)文本中有自定义标记。从这个自定义标记我只需要它的单个特定属性。 需要的是:
不是自定义标记的文本匹配(包括常规html标记)。(命名为:text)
自定义标记(mytag)上的匹配项以及属性(tagattribute)上的匹配项
我可以像这样匹配标签:
(?<mytag><my-tag\ data-tag='(?<TagAttribute>.*?)'>.*?</my-tag>)
如果&#34;拆分&#34;这个正则表达式的样本我得到了我需要的所有部分:
<p>some text<my-tag data-tag='first'>in the tag</my-tag></p> stuff in between<my-tag data-tag='second'>in the second tag </my-tag>after the tags
如何将它与这样的东西结合起来,捕获任何直到新my-tag开头的东西:
(?<text>((.(?!<my-tag))*(.)))
这样当我调用NextMatch时,我会收到一个&#34;文本&#34;或者是&#34; mytag&#34;和&#34; tagattribute&#34;。
我使用Regulator和此单元测试来查看C#正则表达式对它的影响
[TestMethod]
public void RegExTokenizerTest()
{
//arrange
const string expression =
@"(?<TemplateTag><my-tag\ data-tag='(?<TagAttribute>.*?)'>.*?</my-tag>)";
const string target =
@"<p>some text<my-tag data-tag='first'>in the tag</my-tag></p> stuff in between<my-tag data-tag='second'>in the second tag </my-tag>after the tags";
Regex regex =
new Regex(
expression,
RegexOptions.IgnoreCase |
RegexOptions.CultureInvariant |
RegexOptions.Multiline
);
// act
Match match = regex.Match(target);
while (match.Success)
{
ProcessMatches(match.Captures);
match.NextMatch();
}
// assert
// ...
}
我所需要的只是一个&#34; |&#34; (或)
(?<TemplateTag><my-tag\ data-tag='(?<TagAttribute>.*?)'>.*?</my-tag>)|(?<text>((.(?!<my-tag))*(.)))