C# 当段达到最大大小或以特定字符终止时,将字符串解析为段的方法

C# 当段达到最大大小或以特定字符终止时,将字符串解析为段的方法,c#,parsing,C#,Parsing,我希望在C中解析出一个字符串,从该字符串中获得相关的数据段 数据流的一部分的规则用于具有此规则集的地址: 地址行之间带有$的地址。如果少于29个字符,则以“^”结尾 一些例子: 28 Atol Av$套房2$^ Hiawatha公园$Apt 2037^ 340 Brentwood Dr.$Fall Estate 对于段还有其他类似的规则,但是如果我有一个关于这个段的可靠计划,我可以在余下的解析中修改它 我想知道是否有一个正则表达式可以使用 我有。{0,29}^这似乎奏效了。一开始我并没有逃过这场

我希望在C中解析出一个字符串,从该字符串中获得相关的数据段

数据流的一部分的规则用于具有此规则集的地址:

地址行之间带有$的地址。如果少于29个字符,则以“^”结尾

一些例子:

28 Atol Av$套房2$^

Hiawatha公园$Apt 2037^

340 Brentwood Dr.$Fall Estate

对于段还有其他类似的规则,但是如果我有一个关于这个段的可靠计划,我可以在余下的解析中修改它

我想知道是否有一个正则表达式可以使用

我有。{0,29}^这似乎奏效了。一开始我并没有逃过这场灾难

谢谢, Dan

您可以使用string.Split来执行此操作

string [] substrings = string.Split('$');
现在您有了一个字符串数组,其中包含“$”字符之间的值

然后,我假设您只想去掉数组最后一个元素上的“^”字符(如果它存在的话)

int index = substrings.Length - 1;

substrings[index] = substrings[index].TrimEnd('^');
您可以使用正则表达式和Regex.Split,但如果您只需要在“$”和trim“^”上进行拆分,就不需要它了。为此编写一个正则表达式将是过分的

编辑:现在我想起来了,您可以在“$”和“^”上拆分,只需丢弃空条目,就可以省去修剪步骤

string [] substrings = string.Split("$^".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

我将保留预编辑代码,因为它更明确,并且更好地解释了用法。

请展示一些您已经尝试过的操作。对于给定的示例,输出是什么样子的。没有表现出努力的问题会很快被否决和/或关闭…谢谢Eric。不幸的是,可能只有一个地址块,因此可能不存在$字符。鉴于每个段与我给出的示例略有不同,我想很遗憾,我可能需要构建一个非常具体的自定义解析器,它可以计算字符数并查找特殊字符。@user461051如果没有“$”分隔符,上述代码仍然有效。它只会返回原始字符串,因为它没有被拆分。我真的需要在正则表达式中执行所有这些操作,而不是必须执行额外的编码,因为我们的目标是让我们的应用程序可配置用于此解析,这样我们就不必为客户创建新的版本。我们将有不同的格式,其中一些将使用不同的分隔符,它们将位于不同的位置。我有[^\^]{0,29}\^?用于匹配地址块,但这只提供完整地址。理论上,我在想,有没有办法根据小组赛的结果进行小组赛?e、 我从[^\^]{0,29}\^得到了什么?并将其作为附加组返回check out Regex.Split。您可以使用一组自定义分隔符构建正则表达式,然后只返回这些结果。谢谢Eric。问题是我试图避免构建我的框架来支持对初始正则表达式结果的第二次传递。现在,我的整个框架可以通过一个正则表达式进行配置,然后根据返回的每个匹配对象确定要映射到的数据字段。我可以扩展我的框架,允许为一些字段配置第二个过程,但希望避免这种情况。