花括号在C#分割中的问题

4

我有一个字符串中存储着两个数据:emailid,格式如下:

string s = "{email:ss@ss.com}{id:AB12345}";

我只想去掉花括号,并将上述字符串中的电子邮件和ID提取到一个变量中,如下所示。
string email = "ss@ss.com";
string id = "AB12345";

我尝试了string.Format和其他格式化方法,但由于电子邮件和ID的长度可能不同,我找不到解决方案。


2
我将重新标记此问题,因为括号实际上对问题没有任何影响。 - Liath
5个回答

9

您可以使用正则表达式来进行操作。

var match = Regex.Match("{email:ss@ss.com}{id:AB12345}", @"\{email:(.+)\}\{id:(.+)\}");
var email = match.Groups[1].Value;
var id = match.Groups[2].Value;

PS:模式(.+)表示电子邮件和ID至少有一个字符,否则匹配将无法找到电子邮件和ID。如果它们可以为空,则可以将其更改为(.*)


感谢您的快速回答。 - Ramesh Narayan

4
使用Split,您可以像这样实现:
var parts = s.Split(new [] { '{', '}' }, StringSplitOptions.RemoveEmptyEntries);

string email = parts[0].Split(':')[1];
string id = parts[1].Split(':')[1];

0
string s = "{email:ss@ss.com}{id:AB12345}";
string[] str = s.Split("}{".ToArray());
string email = str[1].Replace("email:", "");
string id = str[3].Replace("id:", "");

0
  private static void Main(string[] args)
        {

            string s = "{email:ss@ss.com}{id:AB12345}";
            string email = string.Empty;
            string id = string.Empty;
            FillValue(s, out email, out id);
            Console.WriteLine("email:{0}\nid:{1}",email,id);
              Console.ReadKey();
        }

        private static void FillValue(string s, out string email, out string id)
        {
            var values = s.Replace("}{", "$").Replace("{",string.Empty).Replace("}",string.Empty).Split('$');
            email = values[0].Split(':')[1];
            id = values[1].Split(':')[1];
        }

0

正则表达式是一个不错的解决方案,但由于我不熟悉它,您可以使用 SubstringIndexOf 方法,例如:

string s = "{email:ss@ss.com}{id:AB12345}";
string email = s.Substring(s.IndexOf(':') + 1, 
                           s.IndexOf('}') - s.IndexOf(':') - 1); // ss@ss.com
s = s.Substring(s.IndexOf('}') + 1);
string id = s.Substring(s.IndexOf(':') + 1, 
                        s.IndexOf('}') - s.IndexOf(':') - 1); // AB12345

这里有一个演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接