我有一个程序来解析各种文件格式,目标是找到可本地化的字符串(GetText 差不多)。我正在寻找一个正则表达式,它可以从特定的开始和结束标签中获得“要翻译的文本”。由于 IsVisible 调用,我有一个工作正则表达式,但以下示例破坏了它。
<mw:Translate runat="server" Visible='<%# IsVisible() %>'>
TEXT TO TRANSLATE
</mw:Translate>
这就是我到目前为止所拥有的,但被它困住了......有什么帮助吗?我在//评论中描述了我错误的正则化意图......
(?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 有任何关系),见下文