String.Split可以区分单个实例和多个char实例吗?

时间:2016-01-12 09:16:39

标签: c# string split markdown

我正在使用C#String.Split。

我想拆分'#',但不是'##','###','####'等。我只想拆分角色的单个实例,而不是多个实例。< / p>

我正在使用markdown文件做一些工作。这是我正在使用的降价示例。我想拆分第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

2 个答案:

答案 0 :(得分:7)

您可以使用Regex.Split

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

其中:

  • (?= ... )将括号内的任何内容与前瞻相匹配(包括结果,而不是将其作为分隔符丢弃)
  • ^ RegexOptions.Multiline代表行首锚
  • #[^#]匹配哈希后跟非哈希字符

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

答案 1 :(得分:0)

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

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