如何在字符串中的条件运算符前后添加 space?
How to add a space before and after conditional operator in a string?
我有一个字符串,例如“number1<=number2&&number3>number4||number2=number4”,运算符列表为 -
var operators = new List<string> {"=", "!", "<", ">", ">=", "<=", "!=","||","&&"};
因此,期望在字符串中的每个运算符前后引入一个 space。
"number1 <= number2 && number3 > number4 || number2 = number4"
我尝试了以下代码,但它不起作用,例如,<, >=
public static string AddSpaceBeforeAndAfterOperator(string expression) {
var operators = new List<string> {"=", "!", "<", ">", ">=", "<=", "!=", "||", "&&"};
foreach (var op in operators) {
var index = expression.IndexOf(op, StringComparison.Ordinal);
if (index >= 0) {
if (expression.Substring(index - 1) != " ") {
expression = expression.Insert(index-1, " ");
}
expression = expression.Insert(index + op.Length + 1, " ");
}
}
return expression;
}
注意:运营商列表是随机的。
如有任何帮助,我们将不胜感激!
我不确定这是否是最有效的方法,但使用 replace
很简单
public static string AddSpaceBeforeAndAfterOperator(string expression)
{
var operators = new List<string> { "=", "!", "<", ">", ">=", "<=", "!=", "||", "&&" };
foreach (var op in operators)
{
expression = expression.Replace(op, " " + op + " ");
}
return expression;
}
我会推荐一个正则表达式解决方案。
首先,您需要转义所有运算符,将它们与 |
:
连接在一起
var operatorsString = string.Join("|",
operators.OrderByDescending(x => x.Length).Select(Regex.Escape).ToArray()
);
// OrderByDescending here because we want the longer operators to be matched first.
接下来,创建正则表达式:
var regex = $"\s*({operatorString})\s*";
在问题中使用 operators
数组,数组如下所示:
\s*(<=|>=|!=|==|\|\||&&|=|!|<|>)\s?*
请注意,\s*
用于检查运算符是否已被 space 包围。如果是,那些 space 将被匹配和替换。
替换为:
代码:
Regex.Replace(input, regex, " ");
注意前导和尾随 space。
另请注意 Regex
在 System.Text.RegularExpressions
名称中 space。
我有一个字符串,例如“number1<=number2&&number3>number4||number2=number4”,运算符列表为 -
var operators = new List<string> {"=", "!", "<", ">", ">=", "<=", "!=","||","&&"};
因此,期望在字符串中的每个运算符前后引入一个 space。
"number1 <= number2 && number3 > number4 || number2 = number4"
我尝试了以下代码,但它不起作用,例如,<, >=
public static string AddSpaceBeforeAndAfterOperator(string expression) {
var operators = new List<string> {"=", "!", "<", ">", ">=", "<=", "!=", "||", "&&"};
foreach (var op in operators) {
var index = expression.IndexOf(op, StringComparison.Ordinal);
if (index >= 0) {
if (expression.Substring(index - 1) != " ") {
expression = expression.Insert(index-1, " ");
}
expression = expression.Insert(index + op.Length + 1, " ");
}
}
return expression;
}
注意:运营商列表是随机的。
如有任何帮助,我们将不胜感激!
我不确定这是否是最有效的方法,但使用 replace
很简单public static string AddSpaceBeforeAndAfterOperator(string expression)
{
var operators = new List<string> { "=", "!", "<", ">", ">=", "<=", "!=", "||", "&&" };
foreach (var op in operators)
{
expression = expression.Replace(op, " " + op + " ");
}
return expression;
}
我会推荐一个正则表达式解决方案。
首先,您需要转义所有运算符,将它们与 |
:
var operatorsString = string.Join("|",
operators.OrderByDescending(x => x.Length).Select(Regex.Escape).ToArray()
);
// OrderByDescending here because we want the longer operators to be matched first.
接下来,创建正则表达式:
var regex = $"\s*({operatorString})\s*";
在问题中使用 operators
数组,数组如下所示:
\s*(<=|>=|!=|==|\|\||&&|=|!|<|>)\s?*
请注意,\s*
用于检查运算符是否已被 space 包围。如果是,那些 space 将被匹配和替换。
替换为:
代码:
Regex.Replace(input, regex, " ");
注意前导和尾随 space。
另请注意 Regex
在 System.Text.RegularExpressions
名称中 space。