如何只替换不在 c# 中两个引号之间的字符串
How do I replace only strings that are not between two quotes in c#
例如我有字符串:
(一二树"one"五"two""two""five"二"six"二六)
我希望输出为:
(一2树"one"五"two""two""five"2"six"2六)
string.replace("two", "2"),将替换字符串中的所有 "two",而这不是我要找的
您可以创建自己的替换方法,例如:
private void replace()
{
string str = "one two tree 'one' five 'two' 'two' 'five' two 'six' two six";
string[] strArr = str.Split(' ');
for(int i =0;i<strArr.Length;i++)
{
if(strArr[i]=="two")
{
strArr[i] = "2";
}
}
str = string.Join(" ", strArr);
return str;
}
此代码会将字符串拆分为数组并检查索引字符串是否相同,如果它包含 ("),则不会考虑它。
您可以按 "
拆分字符串,这将创建一个字符串数组,其中奇数索引上的每个字符串都将用引号引起来。所以偶数索引上的每个字符串都没有被引用,您可以安全地执行替换。然后只需将它们与子字符串之间的 "
s 连接起来即可。
var str = "one two tree \"one\" five \"two\" \"two\" \"five\" two \"six\" two six";
var strs = str.Split('"');
for (int i = 0; i < strs.Length; i += 2) {
strs[i] = strs[i].Replace("two", "2");
}
如果你想让它更通用一些,除了其他响应之外,你还可以遍历所有元素并跳过那些包含在 " 字符中的元素。类似于:
var split = str.Split(' ');
foreach (var el in split) {
if (el.StartsWith("\"") && el.EndsWith("\"")) {
continue;
}
// do your replace here
}
没什么大区别,但至少你的代码更简洁了,因为现在你可以在评论附近做任何你想做的替换,确定元素没有用引号引起来,无论是用 2 替换 2 还是任何其他变化。
尝试Regex.Replace() + string.Format()
将占位符 ({0}
) 替换为字符串值(此处为 two
),并在指定的字符串值前面有 space 或行首时匹配输入然后是 space 或行尾。
匹配项替换为另一个字符串(此处为 "2"
):
string input = "one two tree \"one\" five \"two\" \"two\" \"five\" two \"six\" two six";
string pattern = @"(?<=^|\s){0}(?=\s|$)";
string result = Regex.Replace(input, string.Format(pattern, "two"), "2");
结果是:
one 2 tree "one" five "two" "two" "five" 2 "six" 2 six
例如我有字符串:
(一二树"one"五"two""two""five"二"six"二六)
我希望输出为:
(一2树"one"五"two""two""five"2"six"2六)
string.replace("two", "2"),将替换字符串中的所有 "two",而这不是我要找的
您可以创建自己的替换方法,例如:
private void replace()
{
string str = "one two tree 'one' five 'two' 'two' 'five' two 'six' two six";
string[] strArr = str.Split(' ');
for(int i =0;i<strArr.Length;i++)
{
if(strArr[i]=="two")
{
strArr[i] = "2";
}
}
str = string.Join(" ", strArr);
return str;
}
此代码会将字符串拆分为数组并检查索引字符串是否相同,如果它包含 ("),则不会考虑它。
您可以按 "
拆分字符串,这将创建一个字符串数组,其中奇数索引上的每个字符串都将用引号引起来。所以偶数索引上的每个字符串都没有被引用,您可以安全地执行替换。然后只需将它们与子字符串之间的 "
s 连接起来即可。
var str = "one two tree \"one\" five \"two\" \"two\" \"five\" two \"six\" two six";
var strs = str.Split('"');
for (int i = 0; i < strs.Length; i += 2) {
strs[i] = strs[i].Replace("two", "2");
}
如果你想让它更通用一些,除了其他响应之外,你还可以遍历所有元素并跳过那些包含在 " 字符中的元素。类似于:
var split = str.Split(' ');
foreach (var el in split) {
if (el.StartsWith("\"") && el.EndsWith("\"")) {
continue;
}
// do your replace here
}
没什么大区别,但至少你的代码更简洁了,因为现在你可以在评论附近做任何你想做的替换,确定元素没有用引号引起来,无论是用 2 替换 2 还是任何其他变化。
尝试Regex.Replace() + string.Format()
将占位符 ({0}
) 替换为字符串值(此处为 two
),并在指定的字符串值前面有 space 或行首时匹配输入然后是 space 或行尾。
匹配项替换为另一个字符串(此处为 "2"
):
string input = "one two tree \"one\" five \"two\" \"two\" \"five\" two \"six\" two six";
string pattern = @"(?<=^|\s){0}(?=\s|$)";
string result = Regex.Replace(input, string.Format(pattern, "two"), "2");
结果是:
one 2 tree "one" five "two" "two" "five" 2 "six" 2 six