Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用特定的删除器将字符串吐入数组_C#_Asp.net_Regex - Fatal编程技术网

C# 使用特定的删除器将字符串吐入数组

C# 使用特定的删除器将字符串吐入数组,c#,asp.net,regex,C#,Asp.net,Regex,希望找到一种将字符串信息拆分为数组的方法,如下所示。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örvar

希望找到一种将字符串信息拆分为数组的方法,如下所示。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.

.

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

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

string source=“P210 Får inte-utsättas…Förvaras svalt.Iörker。”;
...
字符串模式=@“(?P[0-9]{3}(\+P[0-9]{3}){0,2})(?。+?)(?=(P[0-9]{3})|$)”;
string[]line=Regex.Matches(源、模式)
第()类
.Select(匹配=>match.Value)
.ToArray();

是,或使用正则表达式。这不是回答,而是评论。通过编辑问题或回答2-3个问题,您可以轻松获得评论权限所需的50分。我试图通过循环字符串来实现这一点,当发现字符“P”获取此索引时,如果以下两个字符是整数,则表示应在数组中添加一个新位置。注意,您可以使用
\d
来避免写入
[0-9]
@pie3636:
\d
不等于
[0-9]
,例如
\d
也包括波斯数字:
谢谢,我完全不知道。查找后,在一些其他语言(如JavaScript)中,它似乎只包含
[0-9]
。或者与
(?=(?)拆分。此外,如果使用
RegexOptions.ECMAScript
标志,
\d
等于
[0-9]
  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");
(?<!                 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)