我正在尝试拆分以下类型的字符串:
"COM_RST :BOOL := FALSE;"
"COM_RST : DINT := 0;"
所以我创建了这个正则表达式函数,我想要解析无限量的空格,然后是双点后跟空格或字母。
Regex Rx = new Regex(@"[ ]*[:]([ ]|[A-Z])");
目标是将其分成两部分,以便我得到以下内容:
sides[0] = "COM_RST";
sides[1] = "BOOL := FALSE;"
我正在使用
string[] sides = Rx.Split(inputStr).Where(s => !string.IsNullOrWhiteSpace(s)).ToArray();
对于某些输入似乎运行,但对于上面提到的输出,这是我得到的输出:
sides[0] = " COM_RST";
sides[1] = "B";
sides[2] = "OOL := FALSE;";
答案 0 :(得分:2)
您获得Object
,因为您的正则表达式包含捕获组:sides[1] = "B"
。捕获后,此文本将作为结果列表的单独元素输出。见this C# Regex.Split
excerpt:
如果在Regex.Split表达式中使用捕获括号,则任何捕获的文本都包含在结果字符串数组中。
如果您打算仅在大写ASCII字母前使用([ ]|[A-Z])
+ spaces
+ :
进行拆分,请使用前瞻:
spaces
请注意,仅当您使用[ ]*:[ ]*(?=[A-Z])
的自由间距模式时才需要括号。
非正则表达式替代方案将字符串拆分为2个部分,并使用第一个RegexOptions.IgnorePatternWhitespace
:
:
答案 1 :(得分:0)
此正则表达式适用于您的示例:\ s *:\ s *(?!=)