【问题标题】:Get values between curly braces c#获取花括号之间的值c#
【发布时间】:2013-06-27 02:22:46
【问题描述】:

我以前从未使用过正则表达式。我很高兴在论坛中看到类似的问题,但不完全是我要找的问题

我有一个如下字符串。需要获取大括号之间的值

例如:“{name}{name@gmail.com}”

我需要得到以下拆分的字符串。

姓名和姓名@gmail.com

我尝试了以下方法,它返回了相同的字符串。

string s = "{name}{name@gmail.com}";
string pattern = "({})";
string[] result = Regex.Split(s, pattern);

【问题讨论】:

  • 这是一个相当不错的创建正则表达式模式/学习正则表达式的工具gskinner.com/RegExr

标签: c# regex string c#-4.0 string-split


【解决方案1】:

使用Regex 中的Matches 而不是Split 可以轻松完成此操作:

string input = "{name}{name@gmail.com}";
var regex = new Regex("{(.*?)}");
var matches = regex.Matches(input);
foreach (Match match in matches) //you can loop through your matches like this
{
  var valueWithoutBrackets = match.Groups[1].Value; // name, name@gmail.com
  var valueWithBrackets = match.Value; // {name}, {name@gmail.com}
}

【讨论】:

  • 有趣,我得到了带括号的匹配项。为什么? //我的匹配项:{name}、{name@gmail.com}
  • @Georg 相应地更改了答案。包括一个组来显示带有或不带括号的值。与其他解决方案的不同之处在于 Regex 查找匹配项,而其他答案是直接拆分字符串。
【解决方案2】:

必须使用正则表达式吗?在这个特定的例子中,我会写:

s.Split(new char[] { '{', '}' }, StringSplitOptions.RemoveEmptyEntries)

【讨论】:

  • @FabianBigler 我的印象是正则表达式可以轻松实现这一点,所以我在标题中加入了正则表达式:)。我现在改了标题;)
  • 建议的解决方案是否也将string s = "}name{name@gmail.com";等字符串视为正确?
  • 我投票太快了……这个解决方案没有提供答案。考虑输入字符串:{name}blabla{name@gmail.com},数组中还有“blabla”……
【解决方案3】:

给你

string s = "{name}{name@gmail.com}";
s = s.Substring(1, s.Length - 2);// remove first and last characters
string pattern = "}{";// split pattern "}{"
string[] result = Regex.Split(s, pattern);

string s = "{name}{name@gmail.com}";
s = s.TrimStart('{');
s = s.TrimEnd('}');
string pattern = "}{";
string[] result = Regex.Split(s, pattern);

【讨论】:

  • 它可以工作,但是有没有办法只使用 Regex 模式而不使用 Substring 来获得这个结果?
  • 我想知道是否有任何方法可以仅使用正则表达式模式获取结果而不进行任何其他字符串操作?
  • @Coder 是的,看看我的回答。 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-17
  • 2019-02-07
  • 2014-11-26
  • 1970-01-01
  • 2010-09-29
相关资源
最近更新 更多