获取字符串中两个字符之间的所有字符串

时间:2019-01-08 06:40:36

标签: c# string split

我有一个像这样的字符串:

  

{abc} @ {defgh} mner {123}

如何获取{{{{}}}}{之间的所有字符串作为数组或列表?

赞:

}

7 个答案:

答案 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);
}

https://regexr.com/460a3

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

Fiddle Result


简单版本

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

Fiddle Result

答案 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 +)}的意思是:

  • {:找到一个{
  • (:开始捕获数据组
  • \ w +:匹配一个或多个单词字符(a到z,0到9)
  • ):捕获结束
  • ):找到一个}

这将找到大括号之间的所有文本

正则表达式将给出一个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