كيفية استخراج محتويات الأقواس المعقوفة في سلسلة من النص في ج # باستخدام التعبيرات المنتظمة

StackOverflow https://stackoverflow.com/questions/1811183

  •  06-07-2019
  •  | 
  •  

سؤال

وإذا كان لدي سلسلة من النص مثل أدناه، كيف يمكنني جمع محتويات الأقواس في مجموعة في ج # حتى لو كان يذهب أكثر من فواصل الأسطر؟

وعلى سبيل المثال ...

string s = "test [4df] test [5yu] test [6nf]";

ويجب أن تعطي لي ..

وجمع [0] = 4df

وجمع [1] = 5yu

وجمع [2] = 6NF

هل كانت مفيدة؟

المحلول

ويمكنك القيام بذلك مع التعابير العادية، وقليلا من ينق.

    string s = "test [4df] test [5y" + Environment.NewLine + "u] test [6nf]";

    ICollection<string> matches =
        Regex.Matches(s.Replace(Environment.NewLine, ""), @"\[([^]]*)\]")
            .Cast<Match>()
            .Select(x => x.Groups[1].Value)
            .ToList();

    foreach (string match in matches)
        Console.WriteLine(match);

وإخراج:

4df
5yu
6nf

وإليك ما يعني التعبير العادي:

\[   : Match a literal [
(    : Start a new group, match.Groups[1]
[^]] : Match any character except ]
*    : 0 or more of the above
)    : Close the group
\]   : Literal ]

نصائح أخرى

Regex regex = new Regex(@"\[[^\]]+\]", RegexOptions.Multiline);

والمفتاح هو للهروب بشكل صحيح الأحرف الخاصة المستخدمة في التعبيرات العادية، على سبيل المثال يمكنك أن تطابق شخصية [ بهذه الطريقة: @"\["

Regex rx = new Regex(@"\[.+?\]");
var collection = rx.Matches(s);

وسوف تحتاج إلى تقليم الأقواس المربعة قبالة، والجزء المهم هو المشغل كسول.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top