الحصول على جميع السلاسل بين حرفين في سلسلة

لدي سلسلة مثل هذه:

{حروف} @ {} defgh mner {123}

كيف يمكنني الحصول على كل السلاسل بين { و } كمصفوفة أو قائمة؟

مثله:

{{abc} ، {defgh} ، {123}}

1
استخدام التعبيرات العادية مع مجموعات الالتقاط
وأضاف المؤلف Caius Jard, مصدر
radin كيف تعرف حلقة ليست هي أفضل طريقة؟ انشر الرمز الخاص بك حتى نتمكن من إخبارك. أخبرنا أيضًا ما هو "الأفضل" بالنسبة إليك
وأضاف المؤلف Caius Jard, مصدر
نعم ، أعتقد أن التعديل الذي أجريته سيؤدي إلى إبطال الكثير من الإجابات هنا. لا يمكننا أيضًا نشر أية إجابات أخرى لأن هذا السؤال مغلق باعتباره نسخة مكررة. طرح سؤال جديد ، ووضع النسخة المعدلة. {a {b} c} d {e} هو متطلب مختلف تمامًا عن {a} b {c} d {e} ، وربما يتطلب حلقة تحصي الأقواس ويصدر فقط نصًا عندما يصبح العدد صفرًا.
وأضاف المؤلف Caius Jard, مصدر
هل جربت شيئًا بالفعل؟ هناك طريقتان للقيام بذلك
وأضاف المؤلف shree.pat18, مصدر
وأضاف المؤلف BACON, مصدر
radin هذا السؤال مغلق كنسخة مكررة ، وكان سؤالك الأصلي. تؤدي الإضافة الجديدة إلى تغيير نطاق السؤال ، ولذلك من الأفضل أن تقوم ببساطة بفتح واحدة جديدة (بشكل عام). في هذه الحالة بالذات ، يجيب هذا السؤال عن احتياجاتك الدقيقة: stackoverflow.com/questions/2778532/&hellip،
وأضاف المؤلف Sascha Wolf, مصدر
هل هذا {abc}}} ممكن {@ defgh} mner {123} ؟ أو هذا asd {asd ؟
وأضاف المؤلف FCin, مصدر
نعم ، أكتب حلقة للحصول على سلاسل بين {و} ، لكنها ليست أفضل طريقة. @ shree.pat18
وأضاف المؤلف radin, مصدر
نعم ، ممكن.
وأضاف المؤلف radin, مصدر
CaiusJard فعلت هذا الرابط . لكن سلسلتي مختلفة. <�كود> {{ASD ASD} دد} 34 {wqw} </القانون>
وأضاف المؤلف radin, مصدر
تضمين التغريدة ردًا علىCaiusJard
وأضاف المؤلف radin, مصدر
BACON I عدل هذا السؤال ، يرجى التحقق منه.
وأضاف المؤلف radin, مصدر

7 إجابة

باستخدام Regex هو اختيار جيد

    string str = "{abc}@{defgh}mner{123}";
    foreach (Match match in Regex.Matches(str,"{[^}]+}"))
    {
        Console.WriteLine(match.Value);
    }
2
وأضاف

باستخدام مواقع مثل RegExr ، يمكنك بسهولة تجربة تعبيرك المعتاد قبل استخدامه في الكود:

string str = "{abc}@{defgh}mner{123}";
foreach (Match match in Regex.Matches(str,"(\{.+?\})"))
{
    Console.WriteLine(match.Value);
}

https://regexr.com/460a3

1
وأضاف

يمكنك استخدام Regex

var str = "{abc}@{defgh}mner{123}";
var regex = new Regex(@"({\w+})",RegexOptions.Compiled);
var result = regex.Matches(str).Cast().Select(x=>x.Value);

result is IEnumerable as required in OP

الناتج (قيمة النتيجة)

{abc} 
{defgh} 
{123} 
0
وأضاف

باستخدام Regex وتحويلها إلى قائمة باستخدام LINQ

var l = new Regex(@"\{(\w+)\}")
        .Matches("{abc}@{defgh}mner{123}l")
        .Cast()
        .Select(m => m.Groups[0].Value)
        .ToList();

كيف تعمل:

التعبير المعتاد {(\ w +)} يعني:

  • {: البحث عن {
  • (: بدء التقاط مجموعة البيانات
  • \ w +: تطابق حرف كلمة أو أكثر (من الألف إلى الياء ، من 0 إلى 9)
  • ): نهاية الالتقاط
  • ): ابحث عن}

هذا سيجد كل النص بين الأقواس المتعرجة

يعطيك التعبير المعتاد MatchCollection

يجب علينا استخدام Cast لتحويلها إلى استعلام linq يمكن الاستعلام عنه

نحن. حدد العناصر من المجموعة ، m عنصر فردي ، m.Groups [0] .Value هو النص الذي تلتقطه المجموعة ، بين الأقواس المتعرجة

.ToList بإرجاع كافة النصوص في قائمة واحدة

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));
  }
}
0
وأضاف
var input = "{abc}@{defgh}mner{123}";
var pattern = @"\{(.+?)\}";

var matches = Regex.Matches(input, pattern);
IList output = new List();
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 output = matches.Cast().Select(x => x.Groups[0].Value).ToList();           
output.Dump();  

Fiddle Result

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

الإخراج:

     

واي بي سي

     

وdefgh

     

123

You can check the Online Execution of the code : http://tpcg.io/uuIxo1

0
وأضاف