我试图解析一个字符串,该字符串包含带有星号的文本:
var input = "*This is the first part*This is the second part";
我想提取星星之间的任何文本和最后一颗星之后的文本。字符串不是以星星结尾,也不是以换行符结尾。
为了实现这一目标,我与Sprache一起编写了一个解析器:
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一直在解析输入的末尾。
我如何让解析器解析,直到输入的末尾是星号或?任何帮助都将不胜感激!谢谢
发布于 2020-03-13 18:59:43
,我认为这是因为rest一直解析到输入的末尾。
你说得对。Parse.AnyChar不会在下一个*停止。你可以这样做:
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);
}
}
}https://stackoverflow.com/questions/60674727
复制相似问题