有一个字符串“字段1 = abc,字段2 = 123”
字段1、2固定 abc、123是可变的
我怎么根据字段1、2查找出abc和123?
注意给出查找不到时的异常处理
还有找到以后怎么样替换?可以用正则表达式也可以用其他办法谢谢大家
字段1、2固定 abc、123是可变的
我怎么根据字段1、2查找出abc和123?
注意给出查找不到时的异常处理
还有找到以后怎么样替换?可以用正则表达式也可以用其他办法谢谢大家
解决方案 »
- Spring.net通过xml配置文件给aspx页面注入对象
- sos:类型“System.Data.Linq.DataContext”在未被引用的程序集中定义。
- C# 读取xml文件问题 在线等
- 电子标签技术!
- 从数据库读取内容并显示,请问如何设置段落首行空两格?
- 高手的100分全拿去!!! 求VS2005+Oracle+C#的用户登陆验证程序!
- datagrid中的这样一个问题如何解决,请高手指教!
- 如何用C#写ActiveX dll文件,如何在其他机器上注册和引用该dll文件?
- 同结构数据库之间的数据转移?
- 12306系统登陆接口的更改!!!求解答!!!
- 如何将数字转换为动态位数的字符串
- 小弟跪求Directpaly的C#例子,还有winsocket和Directplay的区别和优劣.
请将这个字符串完整地写下来,免得到时候不能使用!
难道要根据字段的长度直接取固定长度位置么?那肯定不行的
“字段1 = abc,字段2 = 123”前后各有不定长字符串
只能用查找的方式
就是写"字段1 = {0},字段2 = {1}"然后把{0}和{1}输出到变量里面或者有正则表达式的也可以
string v2 = textBox2.Text;
string str = string.Format("字段1 = {0},字段2 = {1}", v1, v2);
string a = "字段1 = abcaaab,字段2 = 123123123";
string a1 = a.Substring(a.IndexOf("字段1 =") + "字段1 =".Length, a.IndexOf("字段2") - (a.IndexOf("字段1 =") + "字段1 =".Length)-1);
string a2 = a.Substring(a.IndexOf("字段2 =") + "字段2 =".Length);
arr[3]//123
实际上我的是"%字段1 = abc %(这里还有很多不知道是什么的内容)字段2 = 123"
{
Match m = Regex.Match(text,"(?<="+field+@"\s*=\s*).+(?=,|$)");
return m.Success?m.Value:string.Empty;
}
string s ="字段1 = abc,字段2 = 123";
string s1 = GetField(s,"字段1");
string s2 = GetField(s,"字段2");
能和我讲讲用法么?
我调用下了下
string Cols1 = GetField(ReadText, "字段1");
得到的是空值因为正则表达式我不懂 麻烦您了
=前后有空格的 是这个原因么
{
string s = "字段1 = abc,字段2 = 123";
string s1 = GetField(s, "字段1");
string s2 = GetField(s, "字段2");
Console.WriteLine(s1);
Console.WriteLine(s2);
}public static string GetField(string text, string field)
{
Match m = Regex.Match(text, "(?<=" + field + @"\s*=\s*)[^,,\r\n]+");
return m.Success ? m.Value : string.Empty;
}
ps,客客是被楼主你误导的。表说人家回答的不对。
public static string ChangeField(string text, string field,string value)
{
return Regex.Replace(text, "(?<=" + field + @"\s*=\s*)[^,,\r\n]+",value);
}private static void TesrRegex01()
{
string s = "字段1 = abc,字段2 = 123";
string s1 = GetField(s, "字段1");
string s2 = GetField(s, "字段2");
Console.WriteLine(s1);
Console.WriteLine(s2);
Console.WriteLine(ChangeField(ChangeField(s, "字段1", "value1"), "字段2", "value2"));
}
无牙,这样做也太那个了用委托+HashTable替换
按照客客师傅的,用Dictionary实现一个稍微快一点的.private static void TesrRegex01()
{
string s = "字段1 = abc,字段2 = 123";
string s1 = GetField(s, "字段1");
string s2 = GetField(s, "字段2");
Console.WriteLine(s1);
Console.WriteLine(s2);
//Console.WriteLine(ChangeField(ChangeField(s, "字段1", "value1"), "字段2", "value2"));
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("字段1", "value1");
dict.Add("字段2", "value2");
Console.WriteLine(ChangValues(s, dict));
}static string ChangValues(string text,Dictionary<string,string> changes)
{
StringBuilder regex_builder = new StringBuilder();
regex_builder.Append("(?<=(");
foreach (string field in changes.Keys)
{
regex_builder.Append("(" + field + ")|");
}
regex_builder.Remove(regex_builder.Length - 1, 1);//移除最后一个|
regex_builder.Append(@")\s*=\s*)[^,,\r\n]+");
return Regex.Replace(text, regex_builder.ToString(), delegate(Match m) { return changes[m.Groups[1].Value]; });
}