在字符串中搜索并替换
本文关键字:替换 搜索 字符串 | 更新日期: 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