การลบ White Space ออกจากผลลัพธ์ของ Regex


0

ฉันมีคำสั่ง Regex ที่ทำงานเพื่อค้นหาข้อมูล:

การจับคู่เป็นตัวเลข 9 หลัก (ไม่มากไม่น้อย) -กับบางส่วนถูกคั่นด้วยช่องว่างหรือ

(?:\d{9}\s)|(\d{3}[ -]\d{3}[ -]\d{3})

ปัญหาที่ฉันมีกับผลลัพธ์คือการ(?:\d{9}\s)คืนค่าอักขระช่องว่างต่อท้ายหรือแท็บหรือบรรทัดใหม่ - แต่จะป้องกันไม่ให้ส่งคืนผลลัพธ์ 9 หลักจากลำดับตัวเลข 10 หลัก

ฉันจะเปลี่ยนสิ่งนี้อย่างไรเพื่อลบพื้นที่สีขาวในผลลัพธ์หรือทำงานเพื่อดึงข้อมูล\d{9}(ในขณะที่ไม่ส่งคืน 9 หลักจากหมายเลข 10 หลักหรือมากกว่า)

คำตอบ:


1

ใช้ขอบเขตของคำ:

(?:\d{9}\b)|(\d{3}[ -]\d{3}[ -]\d{3})
//   ___^^

ตามความคิดเห็น OP ต้องมีขอบเขตของคำก่อน:

(?:\b\d{9}\b)|(\d{3}[ -]\d{3}[ -]\d{3})

และอาจเป็นส่วนอื่นของทางเลือก:

(?:\b\d{9}\b)|\b(\d{3}[ -]\d{3}[ -]\d{3})\b

regex ทั้งหมดกลายเป็น:

\b(?:\d{9}|(\d{3}[ -]\d{3}[ -]\d{3}))\b

ขอบคุณ Toto มันลบตัวอักษรต่อท้าย - ไม่ทราบเกี่ยวกับคำสั่ง \ b สิ่งนี้จะมีประโยชน์ ส่งคืนอักขระ 9 ตัวสุดท้ายของสตริงอักขระ 10 ตัวซึ่งฉันไม่ต้องการจับคู่ในกรณีนี้
warfy

@warfy: เพิ่มคำที่ไม่เคยได้ยิน \bมาก่อนด้วย(?:\b\d{9}\b)|(\d{3}[ -]\d{3}[ -]\d{3})
โตโต้

1

หากคุณเปลี่ยน\sไป(?=\s)ซึ่งเป็น lookahead เชิงบวก:

(?:\d{9})(?=\s)

ดูเหมือนว่าอาจช่วยแก้ปัญหาของคุณได้ แต่ฉันไม่ทราบข้อกำหนดทั้งหมดของคุณ


@warfy หากสิ่งนี้ตอบคำถามของคุณโปรดทำเครื่องหมายว่าเป็นคำตอบที่ยอมรับ (มีเครื่องหมายถูกสีเทาใต้ลูกศรโหวตขึ้น / ลง)
JonathanDavidArndt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.