在字符串中搜索并替换

本文关键字:替换 搜索 字符串 | 更新日期: 2023-09-27 18:29:08

我有一个字符串如下。

string data = "A := B;'nC:=D";

字符串必须替换为SET语句,如下所示。

data = "SET A=B;'nSET C=D"

它应该将:=替换为=and insert a SET`语句。

我提出了一个如下的算法,但当我有多个:=时,它不起作用。

有没有其他最简单有效的方法来处理这个问题?也许使用RegEx?

private string AddSETStatement(string script)
{
        script = script.Replace(": =", ":=");
        script = script.Replace(":=", ":= ");
        script = script.Replace(" :=", ":= ");
        int found = script.IndexOf(":=");
        while (found > -1)
        {
            int foundspace = -1;
            for (int index = found; index >= 0; index--)
            {
                string temp = script.Substring(index, 1);
                if (temp == " ")
                {
                    foundspace = index;
                    break;
                }
            }
            script = script.Remove(found, 1);
            if (foundspace == -1)
            {
                script = "SET " + script;
            }
            else
            {
                script = script.Insert(foundspace, " SET ");
            }
            found = script.IndexOf(":=");
        }
        return script.Trim();
}

如有任何帮助,我们将不胜感激。

在字符串中搜索并替换

我已经测试过了,我认为这是一个符合您的需求的命令,因为您已经对算法进行了编码(可以用一行代码替换):

script = System.Text.RegularExpressions.Regex.Replace(script, 
     @"([A-Z]{1})['s]{0,1}:['s]{0,1}=['s]{0,1}([A-Z]{1})", "SET $1=$2", 
     System.Text.RegularExpressions.RegexOptions.Multiline);

万一你真的在两者之间和周围使用了不止一个空格:=你可以用这个来代替:

script = System.Text.RegularExpressions.Regex.Replace(script,
     @"([A-Z]{1})['s]*:['s]*=['s]*([A-Z]{1})", "SET $1=$2", 
     System.Text.RegularExpressions.RegexOptions.Multiline);

这就改变了:

A := B;
C:=D
    E: =F
G : = H
  I   :   =   K;

进入:

SET A=B;
SET C=D
    SET E=F
SET G=H
  SET I=K;

还有一个处理麻烦大小写并包含数字的变量名的方法:

script = System.Text.RegularExpressions.Regex.Replace(script,
     @"([A-Za-z0-9]+)['s]*:['s]*=['s]*([A-Za-z0-9]{1})", "SET $1=$2", 
     System.Text.RegularExpressions.RegexOptions.Multiline);

打开这个:

Alpha1 := Bravo2;
Char3le:=Delta9
    E1ch3: =Foxt343
golf : = h1
  I3   :   =   k;

进入:

SET Alpha1=Bravo2;
SET Char3le=Delta9
    SET E1ch3=Foxt343
SET golf=h1
  SET I3=k;

至少有一种或多种组合应该能够为你做这项工作。

非常简单。。。

data = System.Text.RegularExpressions.Regex.Replace(data, "(^|''n)", "$1SET ");

这里有一个例子,使用一个相当"严格"的正则表达式:

Regex.Replace("A := B;'nC:=D", 
  @"(?<=(;|^)('n|'s)*)(?<var1>'w+)'s*:='s*(?<var2>'w+)'s*(?=;|$)",
  "SET $1=$2",
  RegexOptions.ExplicitCapture)

正则表达式的解释:

(?<=  # after: 
    (;|^)     # a semicolon or the start of the string
    ('n|'s)*) # and optional whitespace/newlines
(?<var1>'w+) # variable name - capture it into group "var1"
's*          # optional whitespace
:=           # ":="
's*          # optional whitespace
(?<var2>'w+) # second variable - capture it into group "var2"
's*          # optional whitespace
(?=   # followed by:
    ;|$)  # either a semicolon or the end of the string