ค้นหาหมายเลขเป็นกลุ่มที่มีจำนวนหลักเฉพาะ


23

ฉันต้องการค้นหาหมายเลขความยาวเฉพาะในเอกสารขนาดใหญ่ ฉันพยายามใช้ regex สำหรับสิ่งนี้ ตัวอย่างเช่นหากฉันต้องการค้นหาตัวเลขด้วยตัวเลข 2 หลักฉันจะใช้\d\d(เช่น / d สองครั้งตามด้วยช่องว่าง) มันใช้งานได้ดี

แต่สำหรับการค้นหาตัวเลข 10 หลักนั้นเป็นไปไม่ได้ที่จะพิมพ์ใน\d10 ครั้ง

พยายาม\d{2}พูดว่า ' E486: ไม่พบรูปแบบ: \ d {2} '

มีวิธีที่เร็วกว่า / ง่ายกว่าในการบรรลุเป้าหมายนี้หรือไม่?

คำตอบ:


32

มีสำเนียงการแสดงออกทั่วไปที่แตกต่างกัน บางคน (เช่น Perl's) ไม่จำเป็นต้องใช้แบ็กสแลชในตัวแก้ไขปริมาณ ( \d{2}) บางตัว (เช่น sed) ต้องใช้สอง ( \d\{2\}) และในกลุ่มจะมีเพียงลอนเปิดที่ต้องการ ( \d\{2}) นั่นเป็นสภาวะที่น่าเศร้าของสำเนียงการแสดงออกปกติ

นอกจากนี้ทราบว่าสำหรับการจับคู่ที่แน่นอนตัวเลขที่คุณต้องยึดการแข่งขันเพื่อที่\d\{2}จะไม่ตรงกับตัวเลข ( 12) 123ใน สิ่งนี้สามารถทำได้ด้วยการมองด้านลบและมองไปข้างหน้า :

\d\@<!\d\{2}\d\@!

สมบูรณ์ คุณช่วยกรุณาซับหนึ่งข้อมูลใน regex ได้หรือไม่? จะเป็นประโยชน์จริงๆ ขอบคุณ
mtk

1
สำหรับบางคนที่กำลังดิ้นรนกับไวยากรณ์พื้นฐานของ regexp การมองดู / ไปข้างหน้านั้นค่อนข้างก้าวหน้า ฉันอาจไม่สามารถอธิบายได้ดีกว่าในตัวและ:help /\@<! :help /\@!ไม่ต้องกังวลหากคุณไม่เข้าใจทุกอย่างทันที อย่างที่ฉันบอกว่ามันค่อนข้างก้าวหน้า
Ingo Karkat

นอกจากนี้คุณยังสามารถใส่\vจุดเริ่มต้นของ regex หากคุณต้องการหลีกเลี่ยงการหลบหนี{ดู:help magicข้อมูลเพิ่มเติม (มันทำให้ vim regex ทำงานเหมือน perl regex อีกเล็กน้อยแม้ว่าจะมีความแตกต่างกัน)
evilsoup

ขอบคุณมาก: \d\{4}ใน Vi มันเป็นเรื่องเล็ก ๆ น้อย ๆ เลย
installero

9

ลองทำสิ่งต่อไปนี้:

\d\{2}

และคุณควรจะใช้\ไม่ได้/

คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับ exression ปกติของกลุ่มนี้เว็บไซต์หรือในที่มีvim:help regular



1

ไม่สวยเท่านี้ แต่ใช้งานได้สำหรับฉัน 5 หลักในล็อกไฟล์

/\<\%(\d\d\d\d\d\)\>

-1

สำหรับคนที่ชอบตัวเองไปถึงหน้านี้ก็จะมองหารูปแบบการจับคู่ใด ๆความยาวของตัวเลข:

\d\+

(ฉันใช้เวลาพอสมควรที่จะหาการหลบหนีพิเศษที่ได้รับคำสั่ง \ ก่อน +)


+quantifier ย่อมาจาก 1 หรือมากกว่าที่เกิดขึ้น นิพจน์ทั่วไปนี้ตรงกับตัวเลข 1 หลักขึ้นไป
gaganso
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.