Can-String.Split区分一个字符的单个实例和多个实例

本文关键字:实例 字符 单个 一个 Split Can-String | 更新日期: 2023-09-27 18:29:52

我正在使用C#String.Split.

我想在"#"上拆分,但不想在"##"、"###"、"####"等上拆分。我只想在角色的单个实例上拆分,而不想在多个实例上拆分。

我正在处理降价文件。这是我正在使用的降价示例。我想拆分第1、2和3节,但不拆分小节。默认情况下,它会拆分"#"的所有实例,因此我在数组中得到14个字符串。

#Section 1
This is a sample section, it has two sub-sections
##SubSection 1.1
This is sub-section 1.1
##SubSection 1.2
This is sub-section 1.2
#Section 2
This is a sample section, it has three sub-sections
##SubSection 2.1
This is sub-section 2.1
##SubSection 2.2
This is sub-section 2.2
##SubSection 2.3
This is sub-section 2.3
#Section 3
This is a section without any sub sections

Can-String.Split区分一个字符的单个实例和多个实例

您可以使用Regex.Split:

 var parts = Regex.Split(source, @"(?=^#[^#])", RegexOptions.Multiline);

其中:

  • (?=。。。)将括号内的任何内容匹配为前瞻(包括结果,而不是将其作为分隔符丢弃)
  • ^RegexOptions.Multiline表示线路锚的开始
  • #[^#]匹配后面跟有非哈希字符的哈希

根据Split语义,返回数组中的第一个字符串将是出现在第一个节头之前的子字符串。对于您的示例,这将是一个空字符串,您可能想要丢弃它。

使用string.Split只需使用StringSplitOptions.RemoveEmptyEntries:就可以实现这一点

var value = "### Text";
value.Split (new[] { '#' }, StringSplitOptions.RemoveEmptyEntries); // returns new [] { " Text" }