0

我有评估资源键的内部函数调用。我有兴趣将它们解析为文本文件。

我的模式是Translate.Key(StuffToGrab), translatekey(StuffToGrab), caption=StuffToGrab,header=StuffToGrab和最棘手的一个,<%$ Resources:Resource, StuffToGrab %>

我为他们想出了一些正则表达式:

Translate.Key(\S+)
TranslateKey(\S+)
caption="".+?""
headerName="".+?""
<%\$\s*Resources:.+?%>

但是,他们不返回“StuffToGrab”并返回我必须删除的其他信息,从而减慢了我的进程。

4

1 回答 1

1

如果您想要的只是“StuffToGrab”,那么您真正想要做的是匹配某些字符前面的文本(而不是实际匹配这些字符)。您可以在 .NET 中通过使用零宽度断言来执行此操作,特别是lookbehind(?<=precedingchars)

括号是特殊字符,但\S恰好匹配它们。即便如此,您可能希望明确指定它们。

例子:

(?<=Translate.Key\()[^)]+
(?<=TranslateKey\()[^)]+
(?<=caption=")[^"]+
(?<=headerName=")[^"]+
(?<=<%\$\s*Resources:\s*).*?(?=\s*%>)

请参阅此处的工作示例:http: //fiddle.re/fph0a

于 2013-08-09T19:16:48.530 回答