首页 > 解决方案 > Superpower:仅当字符串开始一行时才将字符串与解析器匹配

问题描述

超能力解析时,如何只匹配一行中的第一个字符串?

例如,我需要匹配 "A: Hello Goodbye\n" 中的 A 冒号,而不是 "Goodbye A: Hello\n" 中的冒号

标签: c#tokenizesuperpower

解决方案


在这里使用您的示例,我会将您的ActorParserNodeParser定义更改为:

public readonly static TokenListParser<Tokens, Node> ActorParser =
    from name in NameParser
    from colon in Token.EqualTo(Tokens.Colon)
    from text in TextParser
    select new Node {
        Actor = name + colon.ToStringValue(),
        Text = text
    };

public readonly static TokenListParser<Tokens, Node> NodeParser =
    from node in ActorParser.Try()
        .Or(TextParser.Select(text => new Node { Text = text }))
    select node;

我觉得 Superpower 有一个错误,因为我不知道为什么NodeParser我必须Try()在第一个解析器上加上 a 时用 a 链接它Or(),但如果我不添加它会抛出错误。

此外,您在检查时的验证input[1]不正确(可能只是复制粘贴问题)。它应该检查"Goodbye A: Hello"而不是"Hello A: Goodbye"


推荐阅读