我目前正在尝试使用以下方法将字符串拆分为其中:
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"
。
分裂时如何包含空格?
答案 0 :(得分:1)
当前(?<=[)])\s*|\s*(?=[(])
正则表达式matches 0+ whitespaces with \s*
,这就是他们失踪的原因。
您可以从正则表达式中删除\s*
,(?<=[)])|(?=[(])
在大多数情况下应该已经有效。
但是,您可以使用其他方法来控制分割出的(...)
子字符串。
例如,您可以使用(\([^()]*\))
正则表达式:
var output = Regex
.Split(input, @"(\([^()]*\))")
.Where(s => !string.IsNullOrEmpty(s))
.ToList();
它将匹配并捕获括号内的子串,因此匹配也将成为结果列表的一部分。
请参阅online C# demo和online regex demo。
拆分清单:
注意:要在平衡括号之间拆分子串,请使用
@"(\((?>[^()]+|(?<c>)\(|(?<-c>)\))*\)(?(c)(?!)))"
见another C# demo。见this answer for this regex description。有关详细信息,请参阅regular-expressions.info Balancing Groups。