Skip to main content
 首页 » 编程设计

c#之我想在 C# 中通过正则表达式解析我的脚本文件

2024年02月13日30www_RR

我有一个像下面这样的脚本文件

[grade] 
`[achievement]` 
 
[gold multiple] 
250 
 
[level] 
34 
99 
 
[pre required quest] 
38 
[/pre required quest] 

例如:

lex("grade") return "`[achievement]`" 
 
lex("level") return "34,99" 

也许我可以通过 linq 做到这一点,但我找不到办法

我试过了

scripts = File.ReadAllText(scriptFilePath); 
string gradeKeyword = @"(?<=\[grade\]\r\n).*?\r\n*(?=\[.*\]\r\n)" 
Regex reg = new Regex(gradeKeyword); 
Match mat = reg.Match(scripts); 

它没有用(我想得到 [achievement])

顺便说一句,我可以通过 linq 做到这一点吗?

请您参考如下方法:

您可以尝试不使用正则表达式。

public static IEnumerable<string> GetScriptSection(string file, string section) 
{ 
    var startMatch = string.Format("[{0}]", section); 
    var endMatch = string.Format("[/{0}]", section); 
    var lines = file.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).ToList(); 
 
    int startIndex = lines.FindIndex(f => f == startMatch) + 1; 
    int endIndex = lines.FindLastIndex(f => f == endMatch); 
 
    if(endIndex == -1) 
    { 
        endIndex = lines.FindIndex(startIndex,  f => f.StartsWith("[") && lines.IndexOf(f) > startIndex); 
        endIndex = endIndex == -1 ? lines.Count : endIndex; 
    } 
 
    return lines.GetRange(startIndex, endIndex - startIndex).Where(l => !string.IsNullOrWhiteSpace(l)).ToList(); 
} 

但我只会使用 YAML、XML 或其他一些常用的格式,而不是自己滚动。