[英]Change parentheses within parentheses into brackets using RegEx
我的起始字符串如下所示:
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就可以做到這一點,那我很好!
確實,無需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,則會使用方括號切換括號。
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();
}
應該這樣做:
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."));
}
您也可以使用此正則表達式:
(?<=\().*(?<bracket>\([^\(]*\)).*(?=\))
與不貪心標志。
您應該用[和]替換組“方括號”,以替換第一個和最后一個字符
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.