在字符串中搜索和替换

时间:2012-03-28 00:30:57

标签: c# replace

我有一个字符串如下。

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

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

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

它应该用:= SET`语句替换and insert a

我推出了如下算法,但当我有多个:=时,它无效。

有没有其他最简单有效的方法来处理这个问题?也许使用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();
}

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

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

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;

至少有一个或那些组合能够为你做这项工作。

答案 1 :(得分:0)

很简单......

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

答案 2 :(得分:0)

这是一个例子,有一个相当“严格”的正则表达式:

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