C# 如何解析,直到找到分隔符或使用Sprache到达输入的末尾?
我正试图解析一个字符串,其中包含点缀着星星的文本:C# 如何解析,直到找到分隔符或使用Sprache到达输入的末尾?,c#,sprache,C#,Sprache,我正试图解析一个字符串,其中包含点缀着星星的文本: var input=“*这是第一部分*这是第二部分” 我想提取星号之间的任何文本以及最后一个星号之后的文本。字符串不会以星形或换行符结尾 我用Sprache编写了一个解析器来尝试实现这一点: Parser<string> thingAfterStarParser = ( from open in Parse.String("*") from rest in Parse.AnyChar.Many().Text()
var input=“*这是第一部分*这是第二部分”代码>
我想提取星号之间的任何文本以及最后一个星号之后的文本。字符串不会以星形或换行符结尾
我用Sprache编写了一个解析器来尝试实现这一点:
Parser<string> thingAfterStarParser = (
from open in Parse.String("*")
from rest in Parse.AnyChar.Many().Text()
select rest
);
var result = thingAfterStarParser.AtLeastOnce().Parse(input);
Parser thingAfterStarParser=(
从Parse.String(“*”)中打开
来自Parse.AnyChar.Many().Text()中的rest
选择休息
);
var result=thingAfterStarParser.atlestOnce().Parse(输入);
但是,result
只得到一个元素,而不是两个。我认为这是因为rest
一直解析到输入的末尾
如何告诉解析器解析直到输入结束?任何帮助都将不胜感激!多谢各位
我认为这是因为rest一直解析到输入的末尾
你说得对。Parse.AnyChar不会在next*处停止。您可以这样做:
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);
}
}
}