我想用c#中的字符串替换字符串中的charecter。 我试过以下,
在下面的程序中,我希望在charecters':'之间替换charer的集合:'和' - '的第一次出现以及其他一些charecters。
我能够在':'和第一次出现' - '之间提取一组字符。
任何人都可以说如何将这些插入源字符串中。
string source= "tcm:7-426-8";
string target= "tcm:10-15-2";
int fistunderscore = target.IndexOf("-");
string temp = target.Substring(4, fistunderscore-4);
Response.Write("<BR>"+"temp1:" + temp + "<BR>");
示例:
source: "tcm:7-426-8" or "tcm:100-426-8" or "tcm:10-426-8"
Target: "tcm:10-15-2" or "tcm:5-15-2" or "tcm:100-15-2"
output: "tcm:10-426-8" or "tcm:5-426-8" or "tcm:100-426-8"
简而言之,我想用':'和' - '(firstoccurance)和charecters extracetd替换同一种字符串之间的charectes。
可以提供任何帮助。
谢谢。
答案 0 :(得分:3)
如果要使用目标内容替换源中的第一个“:Number-”,可以使用以下正则表达式。
var pattern1 = New Regex(":\d{1,3}-{1}");
if(pattern1.IsMatch(source) && pattern1.IsMatch(target))
{
var source = "tcm:7-426-8";
var target = "tcm:10-15-2";
var res = pattern1.Replace(source, pattern1.Match(target).Value);
// "tcm:10-426-8"
}
编辑:要将字符串替换为空字符串,请在实际替换之前添加if子句。
答案 1 :(得分:0)
我不清楚用于决定使用哪个字符串的逻辑,但仍然应该使用Split()
,而不是使用字符串偏移:
(注意删除(0,4)是为了删除tcm:前缀)
string[] source = "tcm:90-2-10".Remove(0,4).Split('-');
string[] target = "tcm:42-23-17".Remove(0,4).Split('-');
现在,您可以在易于访问的数组中使用source
和target
中的数字,因此您可以按照自己的方式构建新字符串:
string output = string.Format("tcm:{0}-{1}-{2}", source[0], target[1], source[2]);
答案 2 :(得分:0)
尝试正则表达式解决方案 - 首先使用此方法,获取source
和target
字符串,并在第一个字符串上执行正则表达式替换,目标是'tcm'之后的第一个数字,必须锚定到字符串的开头。在MatchEvaluator
中,它再次执行相同的正则表达式,但是在target
字符串上。
static Regex rx = new Regex("(?<=^tcm:)[0-9]+", RegexOptions.Compiled);
public string ReplaceOneWith(string source, string target)
{
return rx.Replace(source, new MatchEvaluator((Match m) =>
{
var targetMatch = rx.Match(target);
if (targetMatch.Success)
return targetMatch.Value;
return m.Value; //don't replace if no match
}));
}
请注意,如果正则表达式未在目标字符串上返回匹配项,则不会执行替换。
现在运行此测试(可能需要将上述内容复制到测试类中):
[TestMethod]
public void SO9973554()
{
Assert.AreEqual("tcm:10-426-8", ReplaceOneWith("tcm:7-426-8", "tcm:10-15-2"));
Assert.AreEqual("tcm:5-426-8", ReplaceOneWith("tcm:100-426-8", "tcm:5-15-2"));
Assert.AreEqual("tcm:100-426-8", ReplaceOneWith("tcm:10-426-8", "tcm:100-15-2"));
}
答案 3 :(得分:0)
Heres没有正则表达式
string source = "tcm:7-426-8";
string target = "tcm:10-15-2";
int targetBeginning = target.IndexOf("-");
int sourceBeginning = source.IndexOf("-");
string temp = target.Substring(0, targetBeginning);//tcm:10
string result = temp + source.Substring(sourceBeginning, source.Length-sourceBeginning); //tcm:10 + -426-8