لماذا لا يتطابق هذا التعبير العادي إلى مساحة؟
-
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 والتي سوف تتطابق مع حرف الفضاء واحد.
لا تنتمي إلى StackOverflow