我正在尝试从字符串中筛选一些文本/数据。
我的意图是最终获得两个字符串,即t没有分隔符之间的文本的原始文本(并且没有分隔符字符(和由所有分隔符之间所有字符组成的新的字符串。问题是括号之间的数据可以包含任何,包括";[","]";以及"也因此,有可能在分隔符之间定义一个单开括号而没有闭括号
以下是一个示例:这是一些输入文本。分隔符为"["one_answers"]",因此应从输入字符串中删除其间的所有字符(包括分隔符(。应保存周围括号(括号除外(之间的数据。分隔符之间的所有字符串都应该连接到一个大字符串中。
String input ="{[bra],pro,{[ckets[]]},ent[,HDR]}";
预期结果
String filteredText = "{,pro,{},ent}"; //The original text - the delimiters (surrounding brackets) - everything between the delimiters.
String dataText = "brackets[],HDR"; //The text of all in-between delimiters without the surrounding brackets
我试图手动循环整个字符串中的每个字符,并试图找到起点和终点,以手动获取括号之间的数据。类似这样的东西:
[=openCloseBracket+1
]=openCloseBracket-1
通过这种方式,我们可以确定startIndex和endIndex。只有当所有打开的括号都包含一个闭合括号时,这才有效。由于括号数据也可以包含括号,因此没有明确的开始和停止条件,因此这不起作用。这就是为什么RegEx函数(例如<>"lt>quot;或";(\<.\>(|(".&"(|('.'(|(\(.(("无法按预期过滤掉括号。
如何获取过滤后的文本和从文本中删除的字符(作为一个charArray/string((没有外部分隔符/括号(?有没有更好、更简单的方法可以手动循环整个文本?
这应该适用于手动循环:
string input = "{[bra],pro,{[ckets[]]},ent[,HDR]}";
StringBuilder filtered = new StringBuilder();
StringBuilder data = new StringBuilder();
int bracketCount = 0;
foreach (char c in input)
{
if (bracketCount > 0)
{
if (c == '[')
bracketCount++;
else if (c == ']')
bracketCount--;
if (bracketCount > 0)
data.Append(c);
}
else
{
if (c == '[')
bracketCount++;
else if (c == ']')
bracketCount--;
else
filtered.Append(c);
}
}
Console.WriteLine(filtered);
Console.WriteLine(data);
除非您确定所有的输入都是有效的,否则您可能需要在循环中添加一些错误检查。确保括号匹配正确等。