C# 使用特定的删除器将字符串吐入数组
希望找到一种将字符串信息拆分为数组的方法,如下所示。delimer始终采用以下格式: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
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)