首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解析,直到找到一个分隔符,或到达输入的结束与Sprache?

如何解析,直到找到一个分隔符,或到达输入的结束与Sprache?
EN

Stack Overflow用户
提问于 2020-03-13 17:17:03
回答 1查看 564关注 0票数 1

我试图解析一个字符串,该字符串包含带有星号的文本:

var input = "*This is the first part*This is the second part";

我想提取星星之间的任何文本和最后一颗星之后的文本。字符串不是以星星结尾,也不是以换行符结尾。

为了实现这一目标,我与Sprache一起编写了一个解析器:

代码语言:javascript
复制
Parser<string> thingAfterStarParser = (
    from open in Parse.String("*")
    from rest in Parse.AnyChar.Many().Text()
    select rest
);

var result = thingAfterStarParser.AtLeastOnce().Parse(input);

但是result最后只有一个元素,而不是两个元素。我认为这是因为rest一直在解析输入的末尾。

我如何让解析器解析,直到输入的末尾是星号?任何帮助都将不胜感激!谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-13 18:59:43

,我认为这是因为rest一直解析到输入的末尾。

你说得对。Parse.AnyChar不会在下一个*停止。你可以这样做:

代码语言:javascript
复制
public class UnitTest1
{
    readonly ITestOutputHelper output;

    public UnitTest1(ITestOutputHelper output) => this.output = output;

    [Fact]
    public void Split()
    {
        const string input = "*This is the first part*This is the second part";

        var thingAfterStarParser = 
            from open in Parse.String("*")
            from rest in Parse.AnyChar.Except(Parse.Char('*')).Many().Text()
            select rest;

        var result = thingAfterStarParser.AtLeastOnce().Parse(input);

        foreach (var message in result)
        {
            output.WriteLine(message);
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60674727

复制
相关文章

相似问题

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