لماذا لا يتطابق هذا التعبير العادي إلى مساحة؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

لدي التعبير العادي التالي:

([0-9]+),'(.)':([0-9]+),(L|R|'.')

يطابق هذا على ما يرام:

1,'a':1,R

ومع ذلك ، إذا استبدلت أ مع مساحة ، يفشل:

1,' ':1,R

لماذا لا . تطابق ذلك؟ هل المساحة لم تصنف على أنها شخصية؟ لا يمكنني استخدام س لأنني لا أريد مطابقة علامات التبويب وفواصل الخط. حاولت أيضا:

([0-9]+),'(.| )':([0-9]+),(L|R|'.')

لكن هذا لا يعمل ، إما (وليس لديّ IgnorePatternWhitespace تمكين).

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

المحلول

لا يمكنني إعادة إنتاج ما تراه:

using System;
using System.Text.RegularExpressions;

class Test
{
    static void Main()
    {
        Regex regex = new Regex("([0-9]+),'(.)':([0-9]+),(L|R|'.')");
        Console.WriteLine(regex.IsMatch("1,' ':1,R"));
    }
}

يطبع "صحيح".

هل من الممكن أن يكون لديك شخصية أخرى بين الاقتباسات أيضًا؟ بعض الطابع غير الطباعة؟ من أين يأتي النص؟

يمكنك محاولة تغييره إلى:

([0-9]+),'([^']+)':([0-9]+),(L|R|'.')

لذلك يمكن أن يتطابق أكثر من حرف واحد بين الاقتباسات.

نصائح أخرى

لم أحاول في .NET ، لكن النقطة هي اللغة والتنفيذ المحددة. محاولة:

([0-9]+),'([.| ])':([0-9]+),(L|R|'.')

يستخدم 0x0020 والتي سوف تتطابق مع حرف الفضاء واحد.

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