كيف يمكنني إزالة الأوسط مع نقطة في نهاية المطاف ؟

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

سؤال

لدي مجموعة من الأسماء الأولى في حقل التي تحمل الأوسط مع '.' في النهاية..

أحتاج regex لتحويل هذا المثال:

Kenneth R.

في

كينيث

كنت أحاول بناء بلدي وجدت هذا الموقع المفيد btw..

http://www.gskinner.com/RegExr/

ولكن أنا جديد Perl & التعبيرات العادية و يمكن أن تحصل فقط "...$" - الذي لا طائل منه عندما لا يكون هناك الأوسط في نهاية الاسم الأول....


أنا فقط وجدت اسم آخر شكل بحاجة إلى دراسة...'R.كيلي' يجب أن يكون 'كيلي'

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

المحلول

لإزالة "كلمة" مشاركة إذا كان ينتهي نقطة:

my $name =~ s/\w+\.$//i;

و(هذا يفترض لم يكن لديك أي مساحة بعد ذلك)

لإزالة أي كلمة تنتهي مع نقطة:

my $name =~ s/\w+\.//i;

ونظرة على / ز معدل إذا كنت ترغب في إزالة كل منهم ...

وتجعل نفسك BTW قائمة حالة اختبار للتحقق الحل ثم حاول مع البيانات كلمة حقيقية، وربما كنت سوف تحصل على بعض المفاجآت ...

نصائح أخرى

أن تأخذ الرعاية من R.كيلي الحالة:

s/\w\. *//g

هنا اختبار سريع:

$ echo 'R. Kelly
Kenneth R.
R. Kemp R.
John Q. Smith' | perl -pe 's/\w\. *//g'
Kelly
Kenneth 
Kemp 
John Smith

أود أن اقترح أن:

  1. العالمي الخيار (g) هو مطلوب.
  2. القضية حساسة الخيار (i) لا.
  3. قد تنظر تبحث عن الحالة العلوي ([:upper:]) بالاحرف الاولى فقط.
  4. شخصية متعددة "الأحرف الأولى" يجب أن ينظر إليها بعين الشك.(حتى w+ ربما هو خطأ إلا إذا كان لديه بيانات الحالات ذات الصلة.)
  5. قراءة perldoc perlre للحصول على مزيد من المعلومات.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top