首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >超强功能:仅当字符串开始一行时,才使用解析器匹配该字符串

超强功能:仅当字符串开始一行时,才使用解析器匹配该字符串
EN

Stack Overflow用户
提问于 2018-10-09 00:31:03
回答 3查看 579关注 0票数 0

在超能力中解析时,如何仅当字符串是一行中的第一行时才匹配它?

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

EN

回答 3

Stack Overflow用户

发布于 2018-10-24 05:38:02

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

代码语言:javascript
运行
复制
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有一个bug,因为我不确定为什么在NodeParser中,当我使用Or()链接第一个解析器时,我必须在第一个解析器上放置一个Try(),但是如果我不添加它,它将抛出一个错误。

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

票数 1
EN

Stack Overflow用户

发布于 2018-10-09 01:04:03

除非设置了RegexOptions.Multiline,否则^将匹配字符串的开头,而不管它是否在行首。

您可能可以使用inline (?m)打开multiline:

代码语言:javascript
运行
复制
static TextParser<Unit> Actor { get; } =
  from start in Span.Regex(@"(?m)^[A-Za-z][A-Za-z0-9_]+:")
  select Unit.Value;
票数 0
EN

Stack Overflow用户

发布于 2018-10-25 03:43:20

我实际上做过类似的事情,但我没有使用Tokenizer。

代码语言:javascript
运行
复制
private static string _keyPlaceholder;

private static TextParser<MyClass> Actor { get; } =
    Span.Regex("^[A-Za-z][A-Za-z0-9_]*:")
        .Then(x =>
             {
                 _keyPlaceholder = x.ToStringValue();
                 return Character.AnyChar.Many();
             }
         ))
    .Select(value => new MyClass { Key = _keyPlaceholder, Value = new string(value) });

我没有测试过这个,只是凭记忆把它写出来。上面的解析器应该具有以下内容:

代码语言:javascript
运行
复制
myClass.Key = "A:"
myClass.Value = " Hello Goodbye"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52706549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档