Regex للإعلان المتغير والتهيئة في C#
-
06-09-2019 - |
سؤال
أريد أن أكتب RegEx لسحب كافة قيم المتغيرات وأسمائها من بيان تعريف المتغير.قل لدي
إنت ط، ك = 10، ل = 0
أريد أن أكتب regex شيئًا مثل int s^،؟(بدون سابقة int) الفكرة بشكل أساسي هي إذا بدأت String بـ int ، فاحصل على القائمة المتغيرة المنفصلة عن طريق ،
أعرف كيفية استخراج قيم CSV، ولكن هنا تحتوي سلسلتي على بعض القيمة الأولية أيضًا.كيف يمكنني حلها؟
المحلول
والبدء في التفكير في بنية التعريف، مثلا،
(a line can start with some spaces) followed by,
(Type) followed by
(at least one space)
(variable_1)
(optionally
(comma // next var
|
'='number // initialization
) ...`
وبعد ذلك محاولة لتحويل كل مجموعة:
^ \s* \w+ \s+ \w+ ? (',' | '=' \d+ ) ...
line some type at least var optionally more or init some
start spaces (some chars) one space (some chars) vars val digits
واليسار كما الواجبات المنزلية لإزالة المسافات وتحديد ما يصل التعبير المعتاد النهائي.
نصائح أخرى
إليك بعض المعلومات المفيدة التي يمكنك استخدامها
هل يمكن بناء الخاصة بك التعبير العادية من [C # النحوي] (<لأ href = "http://msdn.microsoft.com/en-us/library/aa664812(VS.71).aspx)" يختلط = "نوفولو noreferrer"> http://msdn.microsoft.com/en-us/library/aa664812 (VS.71) .aspx اتصال) . ولكن بناء محلل سيكون بالتأكيد أفضل.
وجرب هذا:
^(int|[sS]tring)\s+\w+\s*(=\s*[^,]+)?(,\s*\w+\s*(=\s*[^,]+)?)*$
وانها سوف تتطابق مع المثال التعليمات البرمجية
int i,k = 10,l=0
وجعل بعض الافتراضات حول اللغة التي قد تكون أو لا تستخدم، وأنها سوف تتناسب أيضا:
int i, j, k=10, l=0
string i=23, j, k=10, l=0