我有内部函数调用来评估资源键。我有兴趣将它们解析为文本文件。
我的模式是Translate.Key(StuffToGrab)
,translatekey(StuffToGrab)
,caption=StuffToGrab
,header=StuffToGrab
以及最棘手的<%$ Resources:Resource, StuffToGrab %>
我为他们提出了正则表达式:
Translate.Key(\S+)
TranslateKey(\S+)
caption="".+?""
headerName="".+?""
<%\$\s*Resources:.+?%>
然而,他们没有返回'StuffToGrab'并返回我必须删除的其他信息,从而减慢了我的进程。
答案 0 :(得分:1)
如果您想要的只是“StuffToGrab”,那么您真正想要做的就是匹配某些字符前面的文本(而不是实际匹配这些字符)。您可以使用零宽度断言在.NET中执行此操作,特别是lookbehind:(?<=precedingchars)
括号是特殊字符,但\S
恰好与它们匹配。即便如此,您可能希望明确指定它们。
示例:
(?<=Translate.Key\()[^)]+
(?<=TranslateKey\()[^)]+
(?<=caption=")[^"]+
(?<=headerName=")[^"]+
(?<=<%\$\s*Resources:\s*).*?(?=\s*%>)
请参阅此处的工作示例:http://fiddle.re/fph0a