我有下一个问题。例如,如果我有下一个CharArray: {!(!A&& A)(!A&& A)} 这里的问题是我要删除所有'!'在'A'旁边并添加'!'在最初的CharArray中没有它的'A'。所以问题的最终结果必须是: {!(A&& A)(A& A)}
我试图用它来删除'!': // Regla是包含{!(!A&& A)(!A&&!A)}
的字符串`char[] array = Regla.ToCharArray();
for (int i = 0; i < array.Length; i++)
{
char c = array[i];
if (c == idL1 && array[i - 1] == '!')
{
if (cont1 == 0 && cont2 == 0)
{
var tRegla = new StringBuilder(Regla);
tRegla.Remove(i - 1, 1);
Regla = tRegla.ToString();
cont1++;
}
if (cont1 == 1 && cont2 == 1)
{
var tRegla = new StringBuilder(Regla);
tRegla.Remove(i - 2, 1);
Regla = tRegla.ToString();
cont1++;
}
if (cont1 == 2 && cont2 == 2)
{
var tRegla = new StringBuilder(Regla);
tRegla.Remove(i - 3, 1);
Regla = tRegla.ToString();
cont1++;
}
if (cont1 == 3 && cont2 == 3)
{
var tRegla = new StringBuilder(Regla);
tRegla.Remove(i - 4, 1);
Regla = tRegla.ToString();
cont1++;
}
cont2++;
}`
但此刻要加一个'!'我有很多问题,因为计数器'i'改变了,我使用了像:
`var tRegla = new StringBuilder(Regla);
tRegla.Insert(i - 1, "!");
Regla = tRegla.ToString();
cont1++;}`
我认为有更好的方法可以解决它。谢谢。
答案 0 :(得分:4)
您是否必须使用char数组来执行此操作?在我看来,你可以这样做:
Regla.Replace("A", "!A").Replace("!!A", "A");
它会将A
字母的所有实例替换为!A
,因此!A
和A
代替!!A
和!A
。然后它只用!!A
替换所有A
,这应该与原始版本完全相反。
要使用任何大写字母进行此操作,您需要使用Regex.Replace
代替。
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
var Regla = "{!( !A && A) ( !A && !A )}";
var output = Regex.Replace(Regla, "([A-Z])", "!$1").Replace("!!", "");
Console.WriteLine(output);
}
}
这有点复杂......正则表达式将字母放在()中,这使得它成为capture group
。然后,替换位将!
添加到$1
,它表示捕获组内匹配字符的实例。然后,对.Replace()
的调用会删除字符串中的所有!!
。这适用于任何大写字母。如果需要使用其他模式,只需修改正则表达式。