我正在创建一个雨量计皮肤,我需要读取本地文件的内容然后拆分其内容。
我本地文件的内容如下所示:
sentence 1
sentence 2
sentence 3
sentence 4
我的Rainmeter webparser测量结果如下:
[MeasureParser]
Measure=Plugin
Plugin=WebParser.dll
Url=File://#SKINSPATH#\Notes\Files\notes.txt
RegExp="((.*)((?>\r\n|\n|\r)?))+"
然后我的个别字符串索引器看起来像
[MeasureParserChild1]
Measure=Plugin
Plugin=WebParser.dll
Url=[MeasureParser]
StringIndex=1
我希望它能够通过换行符(?>\r\n|\n|\r)
拆分文件内容,但显然它对我不起作用。
我读取我的正则表达式的方式就像有一些字符(.*)
后面跟一个可选的换行符(?>\r\n|\n|\r)?
是可选的(如果我的文件中只有一行。那么所有{ {1}}可以出现多次(1次或更多次)。
无论如何它没有用,所以我在某个地方有一个缺陷,我希望有人可以帮我找到它。
非常感谢您提供任何可能的帮助。 :)
答案 0 :(得分:1)
首先,你不能简单地量化你的整个模式,并希望用索引引用每个匹配,正则表达式不会那样工作,它会吞噬每一个可能的匹配,并返回最后一个。
其次,因为您已将行内容设置为零或更多且换行符部分设置为可选,所以您的上一次匹配可能始终为空字符串。
你真正想要的是创建一个变量来保存你的模式以匹配一行,类似^(.+)$
就足够了,因为它将使用锚点^
和{{1}匹配字符串的开头和结尾。然后你会想要多次使用那个变量,就像你想要的行一样。
如果您想从文件中读取5行,则可以执行$
之类的操作。
修饰符RegExp=(?m)#SingleLine##SingleLine##SingleLine##SingleLine##SingleLine#
用于确保(?m)
和^
匹配行的开头和结尾,而不是尝试匹配整个文件的开头和结尾。然后,您可以引用索引为1到5的行。
如果你想要一些更动态的东西,你不必重复这个模式,并让它自动按你的文件大小缩放,你可能不得不求助于一些Lua脚本。