عند العمل مع سلاسل تتبع نمطًا معينًا، يمكن أن يكون التقاط مجموعات متكررة مهمة شائعة. في Go، تعد التعبيرات العادية أداة قوية لهذا الغرض.
ضع في اعتبارك المشكلة التالية: تحليل السلاسل المكونة من كلمة كبيرة متبوعة بصفر أو أكثر من الوسائط المحاطة بعلامات اقتباس مزدوجة. الهدف هو استخراج كل من الأمر (كلمة كبيرة) والوسائط (السلاسل المقتبسة).
هناك خطأ شائع هو استخدام تعبير عادي مثل:
re1, _ := regexp.Compile(`([A-Z] )(?: "([^"] )")*`)
يلتقط هذا التعبير العادي الوسيطة الأخيرة فقط في السلسلة. قم بتعديل التعبير للسماح بالتقاط مجموعات متعددة من الوسائط:
re1, _ := regexp.Compile(`([A-Z] )|(?: "([^"] )")`)
الآن، لاستخراج كل من الأمر والوسائط، استخدم وظيفة FindAllStringSubmatch مع تعبير عادي معدل بشكل مناسب:
results := re1.FindAllStringSubmatch(`COPY "filename one" "filename two"`, -1)
مجموعات التقاط التعبير العادي هذه هي:
أخيرًا، للتكرار فوق النتائج وافصل الأمر عن الوسيطات:
fmt.Println("Command:", results[0][1])
for _, arg := range results[1:] {
fmt.Println("Arg:", arg[2])
}
من خلال معالجة أوجه القصور في التعبير العادي، يمكنك التقاط المجموعات المتكررة بشكل فعال في كود Go الخاص بك.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3