将字符串插入具有特定delimer的数组中

本文关键字:delimer 数组 字符串 插入 | 更新日期: 2023-09-27 18:01:50

想找到一种方法来分割数组中的字符串信息,如下所示。delimer的格式始终为:

string + int + int + int
P000 or P000 + P000  or P000 + P000 + P000

字符串:

P210 Får inte utsättas för värme, heta ytor, gnistor, öppen låga eller andra antändningskällor. Rökning förbjuden. P220 Hålls/förvarad åtskilt från kläder/brännbara material. P273 Undvik utsläpp till miljön. P280 Använd skyddshandskar/ skyddskläder/ ögonskydd/ ansiktsskydd. P333 + P313 Vid hudirritation eller utslag: Sök läkarhjälp. P403 + P235 Förvaras på väl ventilerad plats. Förvaras svalt. P403 + P235 + P236 Förvaras på väl ventilerad plats. Förvaras svalt. I mörker.

期望输出:

P210 Får inte utsättas för värme, heta ytor, gnistor, öppen låga eller andra antändningskällor. Rökning förbjuden. 
P220 Hålls/förvarad åtskilt från kläder/brännbara material. 
P273 Undvik utsläpp till miljön. 
P280 Använd skyddshandskar/ skyddskläder/ ögonskydd/ ansiktsskydd. 
P333 + P313 Vid hudirritation eller utslag: Sök läkarhjälp.
P403 + P235 Förvaras på väl ventilerad plats. Förvaras svalt
P403 + P235 + P236 Förvaras på väl ventilerad plats. Förvaras svalt. I mörker.

将字符串插入具有特定delimer的数组中

我建议匹配,而不是拆分(因为您希望包含的delimeters(:

  string source = "P210 Får inte utsättas ... Förvaras svalt. I mörker.";
  ...
  string pattern = @"(?<index>P[0-9]{3}( '+ P[0-9]{3}){0,2})(?<text>.+?)(?=(P[0-9]{3})|$)";
  string[] lines = Regex.Matches(source, pattern)
    .OfType<Match>()
    .Select(match => match.Value)
    .ToArray();
Regex.Replace(str, @"(?<!'+ )(P'd'd'd)", "'n$1");

这在大多数情况下都有效,除非有可能在具有Pxxx的组之前找到文本"+ ";例如CCD_ 3将不会分裂。虽然这可以说不是100%的防故障,但在您的情况下,它可能已经足够了,而且很容易阅读/理解。

它所做的是查找与P[digit][digit][digit]匹配但不在"+ "后面的字符串,然后在那里进行拆分。

请注意,您可以将'd'd'd替换为'd{3}

在线测试

Regex解释:

(?<!                 Do not match anything following this text (this is called a negative lookbehind)
    '+               A plus sign and a space
       )
        (P'd'd'd)    A P and 3 digits, parentheses allow us to "save" this group for later
'n$1                 Replace with a newline character and the first group within parentheses (not that the "do not match" part is not included in this)

您可以通过迭代字符串中的每个字符来实现这一点。您可以使用Char.IsDigit和Char.IsChar方法来确定字符是int还是string。