我一直在Stackoverflow和许多其他网站上搜索,但我似乎无法绕过试图让正则表达式匹配我需要的东西。
请参阅以下示例:
这是我正在搜索的文字。
[Date]
;Possible values: Local, Static
;Type = Local
;If using Static type, the year/month/date to set the date to
;Year = 2012
;Month = 1
;Date = 1
[Time]
;Possible values: Local, Custom, Static
Type = Static
;If using Custom type, offset from UTC in hours (can be negative as well)
Offset = 0
;If using Static type (Hour value always the same on every server start), the value (0-24) to set the Hour to
Hour = 9
我想要完成的是前瞻,只获得[时间]括号下的Type = Static。我正在使用C#,如果这有帮助。我尝试了许多不同的模式但没有成功。
(?<=\[Time\]\n+Type = ).*
(?<=\[Time\].*Type =).*
这只是我尝试过的一些想法。有人可以告诉我这样做的正确方法,解释为什么它正在做它做的事情?基于这些评论,我注意到我应该更清楚这个文件比我显示的要大得多,而且几乎每个[SETTING]都包含至少一个类型的标志。此外,它几乎100%确定用户将拥有;注释放入文件中,因此我必须能够搜索特定的[设置]并键入以使其正常工作。
答案 0 :(得分:2)
var val = Regex.Match(alltext,
@"\[Time\].+?Type\s+=\s+([^\s]+)",
RegexOptions.Singleline)
.Groups[1].Value;
这将返回静态
答案 1 :(得分:0)
您可以尝试不同的模式:
(?<=Type\s*=\s*).*(?=[\r\n;]+)
我假设Type =
后面跟着一个以分号;
开头的新行。
感谢@SimonWhitehead和@HamZa提醒我,我应该注意这会捕获Type =
行,所以你需要忽略第一个匹配并只查找第二个匹配。
编辑:你可以尝试另一个表达式,它不如第一个表达式高效:
(?<=\[Time\][\r\n;]*[^\r\n]+[\r\n]*Type\s*=\s*).*