string abc="fdjlsakjfdslk @a 23423prujfsdjlf@b 23erjdwos@c 435r43"
替换@a @b @c 为X Y Z要求
1参数个数并不规定
2参数名称不确定
3 只有@确定
替换@a @b @c 为X Y Z要求
1参数个数并不规定
2参数名称不确定
3 只有@确定
解决方案 »
- C# 中byte* 如何进行 + 运算
- 用Repeater做论坛,怎么实现数据的编辑和删除
- 我是c#新手,请问开发windows应用程序,(不是web)我要用多个客户端连接server,然后server 连接数据库,需要连接池么?如何设置?
- 传值问题!!
- 【求助】C# ORACLE DATETIME问题
- 不耻下问,关于#include的问题!
- 怎样实现TEXTBOX输入,按button1然后在listbox中显示,重复输入能在listbox中换行显示(不能覆盖之前的字符)?
- 未找到提供程序。该程序可能未正确安装。 ADODB.ConnectionClass.Open(
- 关于.net中DataTable的问题,得到关于数据库中的属性
- 老兄,请帮我看看。这样错在哪里了?
- 事件问题
- 怎样调用类,创建对象?
1参数个数并不规定
个数指什么,是@a这类参数在字符串中出现的个数吗2参数名称不确定
名称又指什么,@a @e @k这样的,都是@后跟一个字母吗3 只有@确定
那替换规则如何确定,比如@u替换为什么还是给出实际的例子,或者给出替换后的结果,说下可能出现的情况吧
private string ReplaceParam(string AStr, Dictionary<string, string> AParams)
{
if (AStr == string.Empty || AStr == null || AParams == null) return AStr;
string Result = AStr;
foreach (string vKey in AParams.Keys)
Result = Result.Replace("@" + vKey, AParams[vKey]);
return Result;
}private void Form1_Load(object sender, EventArgs e)
{
Dictionary<string, string> vParams = new Dictionary<string, string>();
vParams.Add("a", "X");
vParams.Add("b", "Y");
vParams.Add("c", "Z"); string abc = "fdjlsakjfdslk @a 23423prujfsdjlf@b 23erjdwos@c 435r43";
Text = ReplaceParam(abc, vParams);
}
-------------------------根据你的这个要求
1参数个数并不规定---这句就无视掉,你出现N次和一次是一样的
2参数名称不确定---这个显然是找茬,名称都不确定那替换什么?难道我替换成随即字母?
3 只有@确定---这个就不说啥了
@ 用{0} ....{n}来标示
例:
string abc="fdjlsakjfdslk {0} 23423prujfsdjlf{1} 23erjdwos{2} 435r43";
abc = string.Format(abc,X,Y,Z);
print abc; //此时输出为fdjlsakjfdslk X 23423prujfsdjlfY 23erjdwosZ 435r43你研究一下format函数,他接受的是param string参数,也就是不定长string数组,可以满足你的需求
{
if (oldStrings.Length == newStrings.Length)
{
for (int i = 0; i < oldStrings.Length; i++)
{
string pattern = @oldStrings[i];
line = Regex.Replace(line, pattern, newStrings[i]);
}
} return line;
}
string abc = "fdjlsakjfdslk @a 23423prujfsdjlf@b 23erjdwos@c 435r43";
abc = ReplaceSpecified(abc, new string[] { "@a", "@b", "@c" }, new string[] { "X", "Y", "Z" });
根据@后面的字母替换 @a->a @b->b以此类推该如何写能满足种情况的替换句子?
多钟情况特指 @a 到@z无规律性出现
--------------------
弱弱的说,理解能力差,还是不太懂这句,跟你上面的例子不一样,要你给结果你也没给按你现在的描述,那这样就可以了
string abc="fdjlsakjfdslk (@a) 23423prujfsdjlf(@b) 23erjdwos(@c) 435r43";
abc = abc.Replace("@","");输出:
fdjlsakjfdslk (a) 23423prujfsdjlf(b) 23erjdwos(c) 435r43如果不是,说下你替换后的结果另外按你顶楼的说法@a,@b,@c分别对应X,Y,Z,那其它的比如@u,@p又分别对应什么,有什么规律
结果换成
string abc="fdjlsakjfdslk (a) 23423prujfsdjlf(b) 23erjdwos(c) 435r43"但不是简单的替换@那么简单的
根据@后面的字母替换 @a->a @b->b以此类推该如何写能满足种情况的替换句子?
多钟情况特指 @a 到@z无规律性出现============我上面写的一个ReplaceSpecified应该能满足你的要求啊private string ReplaceSpecified(string line, string[] oldStrings, string[] newStrings)
{
if (oldStrings.Length == newStrings.Length)
{
for (int i = 0; i < oldStrings.Length; i++)
{
string pattern = @oldStrings[i];
line = Regex.Replace(line, pattern, newStrings[i]);
}
} return line;
}oldStrings是你要替换的, newStrings是对应的你要替换的内容, 由于它们都是string数组, 你可以自由添加多种替换情况
string abc2="fdjlsakjfdslk (@g) 23423prujfsdjlf(@h) 23erjdwos(@a) 435r43"
string abc3="fdjlsakjfdslk (@h) 23423prujfsdjlf(@m) 23erjdwos(@b) 435r43"
string abc4="fdjlsakjfdslk (@j) 23423prujfsdjlf(@m) 23erjdwos(@c) 435r43"
string abc5="fdjlsakjfdslk (@r) 23423prujfsdjlf(@v) 23erjdwos(@u) 435r43"
string abc6="fdjlsakjfdslk (@h) 23423prujfsdjlf(@v) 23erjdwos(@q) 435r43"求一方法能够实现
string abc1="fdjlsakjfdslk (A) 23423prujfsdjlf(B) 23erjdwos(W) 435r43"
即@后的字符大写 替换@x
该方法能够满足1到N个@x出现的可能性再没人听懂 我也不说了
string result = Regex.Replace(abc1, @"@(\w)", new MatchEvaluator(expreplace));
private string expreplace(Match m)
{
return m.Groups[1].Value.ToUpper();
}输出:fdjlsakjfdslk (A) 23423prujfsdjlf(B) 23erjdwos(W) 435r43
string abc2="fdjlsakjfdslk (@g) 23423prujfsdjlf(@h) 23erjdwos(@a) 435r43"
string abc3="fdjlsakjfdslk (@h) 23423prujfsdjlf(@m) 23erjdwos(@b) 435r43"
string abc4="fdjlsakjfdslk (@j) 23423prujfsdjlf(@m) 23erjdwos(@c) 435r43"
string abc5="fdjlsakjfdslk (@r) 23423prujfsdjlf(@v) 23erjdwos(@u) 435r43"
string abc6="fdjlsakjfdslk (@h) 23423prujfsdjlf(@v) 23erjdwos(@q) 435r43"求一方法能够实现
string abc1="fdjlsakjfdslk (A) 23423prujfsdjlf(B) 23erjdwos(W) 435r43"
即@后的字符大写 替换@x
该方法能够满足1到N个@x出现的可能性再没人听懂 我也不说了====================我也晕死了, 现在都第三次了, 用上面提到的ReplaceSpecified方法, 看来, 偶是被你直接忽视了
public string ReplaceArgs(string str,params string[] strArgs)
{
for(int i=0;i<strArgs.Length;i++)
{
str = str.Replace("@" + strArgs[i],"");
} return str;
}动态参数个数 后面随便你带多少个参
{
for(int i=0;i<strArgs.Length;i++)
{
str = str.Replace("@" + strArgs[i],strArgs[i].ToUpper());
} return str;
}