تجاهل لاحقة اختياري مع التعابير المنطقية الجشع
-
07-07-2019 - |
سؤال
وأنا أؤدي مطابقة التعابير المنطقية في. NET ضد السلاسل التي تبدو مثل هذا:
1;#Lists/General Discussion/Waffles Win 2;#Lists/General Discussion/Waffles Win/2_.000 3;#Lists/General Discussion/Waffles Win/3_.000
وأحتاج لتتناسب مع جزء URL بدون أرقام في النهاية، بحيث أحصل على هذا:
Lists/General Discussion/Waffles Win
وهذا هو التعبير المعتاد أحاول:
(?:\d+;#)(?<url>.+)(?:/\d+_.\d+)*
والمشكلة هي أن المجموعة الأخيرة يتم تضمينها كجزء من مباراة المجموعة الأوسط. لقد حاولت ايضا بدون * في نهاية ولكن بعد ذلك فقط السلسلة الأولى أعلاه المباريات وليس بقية.
ولدي تمكين الخيار متعدد الخطوط. أي أفكار؟
المحلول
وهناك عدد قليل من البدائل المختلفة:
@"^\d+;#([^/]+(?:/[^/]+)*?)(?:/\d+_\.\d+)?$"
وهذه المباريات كما القليلة شرائح مسار ممكن، تليها اختياري الجزء الأخير، ونهاية السطر.
@"^\d+;#([^/]+(?:/(?!\d+_\.\d+$)[^/]+)*)"
وهذا يتطابق مع أكبر عدد ممكن من شرائح مسار ممكن، طالما أنها ليست جزء الرقم في نهاية السطر.
@"^\d+;#(.*?)(?:/\d+_\.\d+)?$"
وهذه المباريات كما قليل من الشخصيات ممكن، تليها اختياري الجزء الأخير، ونهاية السطر.
نصائح أخرى
هل يمكن أن تحاول
^(\d+;#)([^/]+(/[^\d][^/]*)*)
ووالحصول على مجموعة 2ND. المجموعة الأولى يطابق 1;#
. يتم تقسيم المجموعة الثانية في الجزء الأول أو URL (يفترض أن تحتوي على أي حرف آخر من /)، ثم تطابق أي عدد من مجموعات /، تليها غير أرقام، تليها أي شيء آخر غير /.
هذا الموقع ، ويبدو أن تفعل ما تريد. محاولة إعطائها مع بعض مزيد من العينات.