regex 获取花括号之间的值c#

wooyq4lh  于 2023-08-08  发布在  C#
关注(0)|答案(4)|浏览(99)

我以前从来没有用过正则表达式。我是阿贝尔看到类似的问题,在论坛上,但不完全是我在寻找什么
我有一个字符串如下。我需要获取花括号之间的值
例如:“{name}{name@gmail.com}”
我需要得到以下拆分的字符串。
名称和name@gmail.com
我尝试了以下方法,它返回相同的字符串。

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

字符串

wkyowqbh

wkyowqbh1#

使用MatchesRegex而不是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}
}

字符串

svdrlsy4

svdrlsy42#

使用regex是必须的吗?在这个特殊的例子中,我会写:

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

字符串

k5hmc34c

k5hmc34c3#

给你

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);

zsohkypk

zsohkypk4#

如果你想避免正则表达式,同时也考虑到非格式化文本(不在花括号内的内容),请在'{'上拆分,然后在'}'上拆分每个文本:

string s = "Hi {firstName}, my name is {firstName}, {myLastName}";

IEnumerable<string> tokens = s
    .Split('{')
    .Where(t => t.Contains('}'))
    .Select(t => t.Split('}').First());

// This will yield "firstName", "firstName", "myLastName".

IEnumerable<string> distinctTokens = tokens.Distinct(); // To weed out duplicates.

字符串

相关问题