我的起始字符串如下所示:
This is (a test) of (something (cool like) this and) stuff like ((that and) stuff) yeah.
我希望将其转化为:
This is (a test) of (something [cool like] this and) stuff like ([that and] stuff) yeah.
括号内的任何括号都需要更改为方括号[]。其他任何东西都保持不变。它不需要递归,只会像示例中那样深一层......如果这有帮助。
到目前为止,我的字符串函数我只能找到第一个括号,所以我真的没有示例代码。 : - /
static String CorrectBrackets(String stringToCorrect)
{
int firstParenIdx = stringToCorrect.IndexOf('(');
return stringToCorrect;
}
另外,如果可以在没有RegEx的情况下完成,我就可以了!
答案 0 :(得分:1)
事实上,这可以在没有RegEx的情况下以非常简单的方式完成:
迭代所有字符并记住括号的嵌套级别。如果您已经处于嵌套级别1并找到任何其他开括号或右括号,请替换它们。
未经测试,但有希望说明:
static string CorrectBrackets(string strString)
{
var result = new System.Text.StringBuilder(strString);
int bracketLevel = 0;
for (int i = 0; i < result.Length; i++) {
switch (result[i]) {
case '(':
bracketLevel++;
if (bracketLevel >= 2) {
result[i] = '[';
}
break;
case ')':
bracketLevel--;
if (bracketLevel >= 1) {
result[i] = ']';
}
break;
}
return result.ToString();
}
答案 1 :(得分:1)
如果您不想使用正则表达式,它会执行此操作,它会计算缩进级别,如果缩进级别大于1,则使用方括号切换括号。
private static string CorrectBrackets(string text)
{
StringBuilder builder = new StringBuilder(text);
int nestingLevel = 0;
for (int i = 0; i < builder.Length; i++)
{
switch (builder[i])
{
case '(':
if (nestingLevel > 0) builder[i] = '[';
nestingLevel++;
break;
case ')':
if (nestingLevel > 1) builder[i] = ']';
nestingLevel--;
break;
default: break;
}
}
return builder.ToString();
}
答案 2 :(得分:1)
这应该这样做:
static readonly Regex regex = new Regex(@"\([^\(^\).]*(?<bracket>\([^\(^\).]+\))[^\(^\).]*\)");
static string ReplaceInnerParens(Match match)
{
return match.Value.Replace(match.Groups["bracket"].Value, "[" + match.Groups["bracket"].Value.Substring(1, match.Groups["bracket"].Value.Length - 2) + "]");
}
static string Replace(string input)
{
return regex.Replace(input, new MatchEvaluator(ReplaceInnerParens));
}
void Main() {
Console.WriteLine(Replace("This is (a test) of (something (cool like) this and) stuff like ((that and) stuff) yeah."));
}
答案 3 :(得分:1)
您也可以使用此正则表达式:
(?<=\().*(?<bracket>\([^\(]*\)).*(?=\))
带有Ungreedy旗帜。
你应该用[和]
替换组“括号”替换第一个和最后一个字符