删除可以包含delimeter的字符串中分隔符之间的文本



我正在尝试从字符串中筛选一些文本/数据。

我的意图是最终获得两个字符串,即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);

除非您确定所有的输入都是有效的,否则您可能需要在循环中添加一些错误检查。确保括号匹配正确等。

最新更新