我有一个字符串如下。
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();
}
任何帮助都将不胜感激。
答案 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