如何将一个字符串中括号里的内容替换。

wxw95_whut 2018-08-16 10:50:34
1.比如字符串PB(W)X(L),需要将括号里的W和L用其他字符替换掉,比如100,300,得到的结果是PB(100)X(300)。
2.最好是我有几个要替换的字符就只替换几个。比如上面那个例子,我只有一个100要替换,所以只需要在第一个括号里面替换掉就行了。
...全文
1107 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq14923349 2018-08-16
  • 打赏
  • 举报
回复
引用 7 楼 xuzuning 的回复:
            var s = "PB(W)X(L)";
var u = new string[] { "100", "300" };
var i = 0;
var r = Regex.Replace(s, @"(?<=\()\w+", m => i < u.Length ? u[i++] : m.Value);
Console.WriteLine(r); //PB(100)X(300)


用正则 可以啊
xuzuning 2018-08-16
  • 打赏
  • 举报
回复
            var s = "PB(W)X(L)";
var u = new string[] { "100", "300" };
var i = 0;
var r = Regex.Replace(s, @"(?<=\()\w+", m => i < u.Length ? u[i++] : m.Value);
Console.WriteLine(r); //PB(100)X(300)
wxw95_whut 2018-08-16
  • 打赏
  • 举报
回复
引用 3 楼 xomix 的回复:
又把简单问题复杂化

你要做的是把 "(W)" 替换为 "(100)" 。

("PB(W)X(L)").Replace("(W)","(100)")


你为啥要找括号位置什么的呢??????


不好意思啊,没表达清楚,我在2楼补充到这个括号里面的字符不一定是W,可能是我定义的其他的,比如W1或L等其他的,但一定是英语和数字的字符。
游北亮 2018-08-16
  • 打赏
  • 举报
回复
写了一下,比较简单:
var source = "PB(W)X(L)M(X)";
var replace = new string[] { "100", "200"};
int lastIdx = 0;
for (int i = 0, j = replace.Length; i < j; i++)
{
var idxLeft = source.IndexOf("(", lastIdx);
var idxRight = source.IndexOf(")", idxLeft + 1);
if (idxLeft >= 0 && idxRight > 0)
{
lastIdx = idxLeft + 1;
source = source.Substring(0, idxLeft + 1) + replace[i] + source.Substring(idxRight);
}
else
{
break;
}
}
Console.WriteLine(source);
Console.Read();


wxw95_whut 2018-08-16
  • 打赏
  • 举报
回复
引用 2 楼 qq_25095899 的回复:
括号里有括号呢
((ABC))

谢谢回复,这种情况不用考虑,括号里面是英语和数字字符,不会是其他的。
  • 打赏
  • 举报
回复
又把简单问题复杂化

你要做的是把 "(W)" 替换为 "(100)" 。

("PB(W)X(L)").Replace("(W)","(100)")


你为啥要找括号位置什么的呢??????
大然然 2018-08-16
  • 打赏
  • 举报
回复
括号里有括号呢
((ABC))
wxw95_whut 2018-08-16
  • 打赏
  • 举报
回复
其中W这个可能是个变的字符,是第一个括号的内容被第一个字符替换掉,第二个括号里的内容被第二个字符替换。
wxw95_whut 2018-08-16
  • 打赏
  • 举报
回复
引用 5 楼 youbl 的回复:
写了一下,比较简单:
var source = "PB(W)X(L)M(X)";
var replace = new string[] { "100", "200"};
int lastIdx = 0;
for (int i = 0, j = replace.Length; i < j; i++)
{
var idxLeft = source.IndexOf("(", lastIdx);
var idxRight = source.IndexOf(")", idxLeft + 1);
if (idxLeft >= 0 && idxRight > 0)
{
lastIdx = idxLeft + 1;
source = source.Substring(0, idxLeft + 1) + replace[i] + source.Substring(idxRight);
}
else
{
break;
}
}
Console.WriteLine(source);
Console.Read();


谢谢,是这样的要求。
wxw95_whut 2018-08-16
  • 打赏
  • 举报
回复
引用 7 楼 xuzuning 的回复:
            var s = "PB(W)X(L)";
var u = new string[] { "100", "300" };
var i = 0;
var r = Regex.Replace(s, @"(?<=\()\w+", m => i < u.Length ? u[i++] : m.Value);
Console.WriteLine(r); //PB(100)X(300)


谢谢了,正好满足我的要求。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧