0

我正在创建一个雨量计皮肤,我需要在其中读取本地文件的内容,然后拆分其内容。

我的本地文件的内容如下所示:

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

我希望它做的是用 newline 分割文件内容(?>\r\n|\n|\r),但显然它对我不起作用。我阅读正则表达式的方式就像有许多字符(.*)后跟一个(?>\r\n|\n|\r)?可选的换行符(如果我的文件中只有一行。然后所有这些(.*)((?>\r\n|\n|\r)?)都可以出现多次(1次或更多)。

无论如何它不起作用,所以我的想法有些地方有缺陷,我希望有人能帮我找到它。

非常感谢您提前提供任何可能的帮助。:)

4

1 回答 1

1

首先,你不能简单地量化你的整个模式,并希望用索引来引用每个匹配,正则表达式不是那样工作的,它会吞噬所有可能的匹配,并返回最后一个。

其次,因为您已将行内容设置为零或多个,并且换行部分设置为可选,所以您的最后一个匹配项可能始终是一个空字符串。

您真正想要的是创建一个变量来保存您的模式以匹配单行,这样^(.+)$就足够了,因为它将使用锚点^$匹配字符串的开头和结尾。然后,您将希望使用该变量的次数与返回的行数一样多。

如果您想从文件中读取 5 行,您将执行类似RegExp=(?m)#SingleLine##SingleLine##SingleLine##SingleLine##SingleLine#. 修饰符(?m)用于确保^$匹配行的开头和结尾,而不是尝试匹配整个文件的开头和结尾。然后,您可以引用索引为 1 到 5 的行。

如果你想要一些更动态的东西,你不必重复模式,并让它随着文件的大小自动缩放,你可能不得不求助于一些 Lua 脚本。

于 2015-01-26T23:26:00.100 回答