سؤال

لقد كنت أبحث لفترة قصيرة لمعرفة كيفية التأكد من أن السلسلة تبدأ برقم.لقد عثرت على عبارة regex '/^\d/' والتي يمكنني تأكيدها إذا كانت تبدأ بالرقم.ومع ذلك لا يبدو أنني أستطيع تشغيله في الكود أدناه.أين أخطأت في البيان؟ if(Regex.Match(info,"/^\d/"))?

//String attachbody is the attachment body from an email C read into a string
string[] data = Regex.Split(attachbody, "\n");

foreach (String info in data)
{
    if (Regex.Match(info,"/^\d/"))
    {
        string[] tabbedHeaderData = Regex.Split(info, "\t");
        TicketID = tabbedHeaderData[0].ToString();
        Status = tabbedHeaderData[1].ToString();
        URL = tabbedHeaderData[2].ToString();
        InitCats = tabbedHeaderData[3].ToString();
        PostRevCats = tabbedHeaderData[4].ToString();
        ListNumClosed = tabbedHeaderData[5].ToString();

        Console.WriteLine(TicketID);
        Console.WriteLine(Status);
        Console.WriteLine(URL);
        Console.WriteLine(InitCats);
        Console.WriteLine(PostRevCats);
        Console.WriteLine(ListNumClosed);
        Console.ReadLine();
    }
}

بيانات المثال (محددة بعلامات جدولة):
url url url url url initcats postrevcats listNcledclosed 5555555 مغلق http://5555555.com/searcho المواقع الضارة 55555

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

المحلول

التعبير العادي الخاص بك خاطئ. /.../ هي اتفاقية جافا سكريبت لتعريف التعبيرات العادية.جرب مثل هذا في C#:

if (Regex.IsMatch(info, @"^\d"))

لاحظ أيضًا أنه يجب عليك استخدام IsMatch الطريقة التي ترجع منطقية أو لن يتم تجميع التعليمات البرمجية الخاصة بك.

وإذا أردت مطابقة تلك السلسلة التي تبدأ برقم واحد أو أكثر:

if (Regex.IsMatch(info, @"^\d+"))

نصائح أخرى

لا تحتاج إلى regex لهذا الغرض.يحاول

if (info.Length > 0 && char.IsDigit(info[0]))
{
   ...
}

إذا كنت تريد استخدام regex، فأخرج ملف // لذلك فهو مجرد Regex.IsMatch(info,@"^\d").

إنه تنسيق السلسلة التي قدمتها إلى Regex.Match.

التنسيق الصحيح سيكون:

Regex.Match(info,@"^\d")

يعني @ أن أحرف الهروب (مثل الشرطة المائلة للخلف) يتم التعامل معها كأحرف عادية.بدونها يجب أن يكون التعبير العادي الخاص بك "^\\d".

التعبير العادي الخاص بك خاطئ.لا يستخدم .Net التعاريف النمطية لنمط Perl.التعبير الصحيح هو @"^\d".

ويجب عليك استخدام Regex.IsMatch(...) إذا كنت لن تستخدم MatchCollection من .Match لأي شيء:

RegEx.IsMatch(info, @"^\d")

إذا كنت تحاول فقط معرفة ما إذا كانت السلسلة تبدأ برقم.كما هو مذكور أعلاه، يمكنك تخطي استخدام regex.ما عليك سوى استخدام السلسلة الفرعية وإزالة الحرف الأول واختبار ما إذا كان رقمًا.

الآن إذا كنت تحاول إزالة الرقم بالكامل، فسأقوم بتحويل السلسلة إلى مصفوفة أحرف، واختبر الأحرف.

سلسلة pseudo s = "" لكل c في chars {إذا كان c هو رقم s += c ell exit for} تحويل s إلى عدد صحيح ، حصلت على الرقم عند بداية السلسلة.

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