c# - ASP.NET 标签的正则表达式解析

标签 c# asp.net regex

我有一个程序可以解析各种文件格式,目标是找到可本地化的字符串(几乎是 GetText)。我正在寻找一个正则表达式,它可以从特定的开始和结束标记中获取“要翻译的文本”。我有一个工作的正则表达式,但由于 IsVisible 调用,以下示例破坏了它。

<mw:Translate runat="server" Visible='<%# IsVisible() %>'>
TEXT TO TRANSLATE
</mw:Translate>

这是我目前所拥有的,但一直坚持下去……有什么帮助吗?我在//comments...

中描述了我错误的正则表达式意图
(?s)                   //multiline flag

\<mw\:Translate        //opening <mw:Translate> tag

(?:(?![^"']+\s*\>)+)   //match anything but > preceeded by " or ' 
                       //with any whitespace after it
(?:["']+\s*)\>         //match > preceeded by " or ' with any 
                       //whitespace after it

\s*                    //match any whitespace 
                       //(for trimming any whitespace around the text)
(?<text>.*?)           //capturing group for the localizable text
\s*                    //match any whitespace 

\</mw\:Translate\>     //match closing tag

我遇到的问题可能是在开始标记中......我试图匹配结束括号 > 只有当它前面有 "或 ' 之后没有或任何空格......因为否则它要么是什么像 %> 或者它不是有效的 ASP.NET

编辑 1:请在得出结论之前阅读问题。这不是 HTML,而是 ASP.NET,任何 HTML 解析器都无法很好地解析它。我也针对一些非常具体的东西。更正:人们似乎同意它可以用 HtmlAgility 包解析,但我真的不想使用它,因为我真的不喜欢依赖外部库对于一个简单的用例。

编辑 2:mw:Translate 不能嵌套。由于 mw:Translate 的编程方式,它根本无法编译。

编辑 3:编辑说明。

编辑 4:不允许自动关闭 mw:translate

编辑 5:mw:Translate 中的 HTML 与 ASP.NET 页面上的任何其他文本一样有效

编辑 6:自己回答,我需要的正则表达式可能有点复杂(但不是因为与 HTML 有任何关系),见下文

最佳答案

即使这是 ASP.NET 而不是 HTML,您也可以使用 HtmlAgilityPack解析它。

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html); // html is the aspx document text
var translatableTextNodes = 
    doc.DocumentNode.SelectNodes("//text()[contains(., 'TEXT TO TRANSLATE')]");
foreach (var parent in translatableTextNodes)
    Console.WriteLine("Node:[{0}] Text:{1}",parent.Name, parent.InnerText);

输出示例页面包含您的服务器控件之一,其中包含TEXT TO TRANSLATE:

Node:[mw:translate] Text:
TEXT TO TRANSLATE

关于c# - ASP.NET 标签的正则表达式解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17524788/

相关文章:

c# - 如何在后台同步下载图片?

c# - RedirectToAction 将我带到当前 Controller 的基本 Controller 而不是定向 Controller

c# - 在 Response.End() 之后更改标签文本

regex - 如何评估一个IP?

javascript - 使用替换和正则表达式将 JavaScript 中字符串的每个单词的首字母大写

c# - 正则表达式如何匹配 2 个字段

c# - 具有不同文件的 LINQ to XML

c# - Serilog:防止创建空日志文件

c# - 将 asp.net 图片添加到 div

c# - 无法生成:Microsoft/aspnetcore的 list :2.1找不到Visual Studio 7.5.2 Mac OS X