String.Split 可以区分字符的单个实例和多个实例吗?

Can String.Split differentiate between a single instance and multiple instances of a char?

我正在使用 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

您可以使用 Regex.Split:

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

其中:

  • (?= ... ) 匹配括号内的任何内容作为先行(将其包含在结果中,而不是将其作为分隔符丢弃)
  • ^RegexOptions.Multiline 代表一个 start-of-line anchor
  • #[^#] 匹配后跟 non-hash 字符的散列

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

您实际上可以使用 string.Split 实现此目的,只需使用 StringSplitOptions.RemoveEmptyEntries:

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