如何使用拆分在字符串的开头和/或结尾保留空间

时间:2018-02-21 08:23:54

标签: c# regex

我目前正在尝试使用以下方法将字符串拆分为其中:

Donald *Trump

输入字符串为:=IF(LEN(A1)-LEN(SUBSTITUTE(A1," ",""))=2,LEFT(A1,FIND(" ",A1)-1) & " *" & RIGHT(A1,LEN(A1)-FIND(" ",A1,FIND(" ",A1)+1)),A1)

想要的输出是:var output = Regex .Split(input, @"(?<=[)])\s*|\s*(?=[(])") .Where(s => s != string.Empty) .ToList(); "hmmmmmmmm (red,asdfhqwe) asasd""hmmmmmmmm "

我得到的输出是:"(red,asdfhqwe)"" asasd""hmmmmmmmm"

分裂时如何包含空格?

1 个答案:

答案 0 :(得分:1)

当前(?<=[)])\s*|\s*(?=[(])正则表达式matches 0+ whitespaces with \s*,这就是他们失踪的原因。

您可以从正则表达式中删除\s*(?<=[)])|(?=[(])在大多数情况下应该已经有效。

但是,您可以使用其他方法来控制分割出的(...)子字符串。

例如,您可以使用(\([^()]*\))正则表达式:

var output = Regex
            .Split(input, @"(\([^()]*\))")
            .Where(s => !string.IsNullOrEmpty(s))
            .ToList();

它将匹配并捕获括号内的子串,因此匹配也将成为结果列表的一部分。

请参阅online C# demoonline regex demo

拆分清单:

enter image description here

注意:要在平衡括号之间拆分子串,请使用

@"(\((?>[^()]+|(?<c>)\(|(?<-c>)\))*\)(?(c)(?!)))"

another C# demo。见this answer for this regex description。有关详细信息,请参阅regular-expressions.info Balancing Groups