我有一个像这样的字符串:
{abc} @ {defgh} mner {123}
如何获取{{{{}}}}
和{
之间的所有字符串作为数组或列表?
赞:
}
答案 0 :(得分:2)
使用正则表达式是一个不错的选择
string str = "{abc}@{defgh}mner{123}";
foreach (Match match in Regex.Matches(str,"{[^}]+}"))
{
Console.WriteLine(match.Value);
}
答案 1 :(得分:1)
使用RegExr等网站,您可以在代码中使用正则表达式之前轻松地对其进行尝试:
string str = "{abc}@{defgh}mner{123}";
foreach (Match match in Regex.Matches(str,"(\{.+?\})"))
{
Console.WriteLine(match.Value);
}
答案 2 :(得分:0)
var input = "{abc}@{defgh}mner{123}";
var pattern = @"\{(.+?)\}";
var matches = Regex.Matches(input, pattern);
IList<string> output = new List<string>();
foreach (Match match in matches)
output.Add(match.Groups[0].Value);
简单版本
var input = "{abc}@{defgh}mner{123}";
var pattern = @"\{(.+?)\}";
var matches = Regex.Matches(input, pattern);
IList<string> output = matches.Cast<Match>().Select(x => x.Groups[0].Value).ToList();
output.Dump();
答案 3 :(得分:0)
您可以使用正则表达式
(zipline) ~ $pip list
Package Version
----------------- ---------
alembic 1.0.5
Bottleneck 1.0.0
ccxt 1.18.110
certifi 2018.8.24
chardet 3.0.4
Click 7.0
contextlib2 0.4.0
cyordereddict 0.2.2
Cython 0.25.2
decorator 4.0.0
empyrical 0.5.0
idna 2.7
intervaltree 3.0.2
Logbook 0.12.5
lru-dict 1.1.6
Mako 1.0.7
MarkupSafe 1.1.0
multipledispatch 0.6.0
networkx 1.9.1
numexpr 2.6.1
numpy 1.15.4
pandas 0.18.1
pandas-datareader 0.2.1
patsy 0.4.0
pip 18.1
python-dateutil 2.4.2
python-editor 1.0.3
pytz 2018.5
requests 2.20.1
requests-file 1.4.1
scipy 0.17.1
setuptools 40.6.3
setuptools-scm 3.1.0
six 1.10.0
sortedcontainers 2.1.0
SQLAlchemy 1.2.15
statsmodels 0.6.1
tables 3.4.4
toolz 0.9.0
trading-calendars 1.6.1
urllib3 1.23
wheel 0.32.3
结果是var str = "{abc}@{defgh}mner{123}";
var regex = new Regex(@"({\w+})",RegexOptions.Compiled);
var result = regex.Matches(str).Cast<Match>().Select(x=>x.Value);
,在OP中是必需的
输出(结果值)
IEnumerable<string>
答案 4 :(得分:0)
使用正则表达式,并使用LINQ将其转换为列表
var l = new Regex(@"\{(\w+)\}")
.Matches("{abc}@{defgh}mner{123}l")
.Cast<Match>()
.Select(m => m.Groups[0].Value)
.ToList();
工作原理:
正则表达式{(\ w +)}的意思是:
这将找到大括号之间的所有文本
正则表达式将给出一个MatchCollection
我们必须使用Cast将其转换为linq可以查询的内容
我们。从集合中选择项目,m是单个项目,m.Groups [0]。值是该组在大括号之间捕获的文本
.ToList返回一个列表中的所有文本
答案 5 :(得分:0)
您可以尝试下面的代码,因为它不使用正则表达式,所以您不需要知道它!
static void Main(string[] args)
{
string s = "{abc}@{defgh}mner{123}";
int i1, i2 = 0;
while ((i1 = s.IndexOf('{', i2)) >= 0)
{
i2 = s.IndexOf('}', i1);
// Here you can add Substring result to some list or assign it to a variable...
Console.WriteLine(s.Substring(i1 + 1, i2 - i1 - 1));
}
}
答案 6 :(得分:0)
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"{([A-Za-z0-9\-]+)}" ;
string input = "{abc}@{defgh}mner{123}";
MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
{
Console.WriteLine(match.Groups[1].Value);
}
Console.WriteLine();
}
}
输出:
abc
defgh
123
您可以检查代码的在线执行: http://tpcg.io/uuIxo1