ฉันจะเขียน regexp ที่ตรงกับจุดเริ่มต้นของบรรทัด ตัวเลขจำนวนมาก และตามด้วยช่องว่างอย่างน้อยหนึ่งช่องได้อย่างไร

ฉันใช้ Rails 5 ฉันต้องการลบตัวเลขออกจากจุดเริ่มต้นของสตริง แต่ต้องมีช่องว่างตามหลังอย่างน้อยหนึ่งช่องเท่านั้น ฉันมากับ regex

/^\d+[:space:]/

ยกเว้นว่ามันทำงานได้ดีเกินไป ด้านล่างนี้เป็นการจับคู่นิพจน์เมื่อไม่ควร

2.4.0 :032 > line = "1sb    212"
 => "1sb    212"
2.4.0 :033 > line =~ /^\d+[:space:]/
 => 0

ไม่ควรตรงกับนิพจน์เนื่องจากคำแรก "1sb" มีตัวเลข แต่เป็นตัวเลขหากไม่เว้นวรรคตามหลัง ฉันจะปรับนิพจน์ของฉันให้ตรงกับตัวเลขตั้งแต่หนึ่งตัวขึ้นไปตามด้วยช่องว่างอย่างน้อยหนึ่งช่องได้อย่างไร


person Dave    schedule 07.08.2017    source แหล่งที่มา


คำตอบ (2)


คุณต้องวางคลาสอักขระ POSIX ลงในนิพจน์วงเล็บ:

/^\d+[[:space:]]/
     ^         ^

ดูการสาธิต Rubular

มิฉะนั้น [:space:] จะถือเป็นคลาสอักขระปกติ และจับคู่อักขระตัวเดียว ไม่ว่าจะเป็น :, s (1sb มี s หลังตัวเลข), p, a, c หรือ e

person Wiktor Stribiżew    schedule 07.08.2017

วิธีแก้ปัญหาง่ายๆ จะเป็นดังนี้:

/^\d+\s+/

โปรดสังเกตว่า \s+ ไม่เพียงแต่จับช่องว่างเท่านั้น แต่ยังรวมถึงแท็บและตัวแบ่งบรรทัดด้วย นี่อาจมีความสำคัญสำหรับกรณีของคุณ

person zhulien    schedule 07.08.2017