RegEx - จับคู่ตัวเลขของความยาวตัวแปร


131

ฉันพยายามแยกวิเคราะห์เอกสารที่มีหมายเลขอ้างอิงอยู่เกลื่อนกลาด

ข้อความข้อความ {4: 2} ข้อความที่น่าทึ่งมากขึ้น {4: 3} ในภายหลังบน {222: 115} และยังมีข้อความอื่น ๆ อีก

การอ้างอิงจะอยู่ในวงเล็บเสมอและจะมีเครื่องหมายจุดคู่ระหว่างทั้งสองเสมอ ฉันเขียนสำนวนเพื่อค้นหาพวกเขา

{[0-9]:[0-9]}

อย่างไรก็ตามสิ่งนี้ล้มเหลวอย่างเห็นได้ชัดเมื่อคุณพบตัวเลขสองหรือสามหลักและฉันมีปัญหาในการหาว่าควรจะเป็นอย่างไร ต้องไม่เกิน 3 หลัก {999: 999} คือขนาดสูงสุดที่จะจัดการได้

ใครมีความคิดเกี่ยวกับการแสดงออกที่เหมาะสมสำหรับการจัดการสิ่งนี้?


8
แม้ว่า OP จะไม่สนใจ แต่ฉันก็สงสัยว่าทำไมถึงโหวตลงในคำถามนี้ ฉันไม่เห็นสิ่งผิดปกติกับมัน
ยอห์น

3
@ จอห์น: ด้วยเหตุผลบางประการที่ผู้คนชอบโหวตคำถามที่มีคำตอบง่าย ๆ โดยเฉพาะในregexแท็ก
CanSpice

1
ในที่สุดคำถามนี้ก็ได้อันดับที่สูงขึ้นใน Google และฉันพบคำตอบของฉันในคำถามนี้
Jasonfish

คำตอบ:



76

คุณใช้เอนจิ้น regex อะไร ส่วนใหญ่จะสนับสนุนนิพจน์ต่อไปนี้:

\{\d+:\d+\}

\dเป็นจริงชวเลข[0-9]แต่ส่วนที่สำคัญคือการเพิ่มขึ้นของ+ซึ่งหมายถึง "หนึ่งหรือมากกว่า"


31

ลองสิ่งนี้:

{[0-9]{1,3}:[0-9]{1,3}}

{1,3}หมายถึง "การแข่งขันระหว่าง 1 และ 3 ของตัวละครก่อน"


8

{min,max}คุณสามารถระบุจำนวนครั้งที่คุณต้องการให้รายการก่อนหน้านี้จะมีการแข่งขันโดยใช้

{[0-9]{1,3}:[0-9]{1,3}}

นอกจากนี้คุณสามารถใช้\dสำหรับตัวเลขแทน[0-9]รสชาติ regex ส่วนใหญ่ได้:

{\d{1,3}:\d{1,3}}

คุณอาจต้องการพิจารณาการหลบหนีจากภายนอก{และ}เพื่อให้ชัดเจนว่าสิ่งเหล่านี้ไม่ได้เป็นส่วนหนึ่งของคำจำกัดความซ้ำ ๆ


2
ไม่โปรดอย่าทำกับรสชาติ regex ส่วนใหญ่เว้นแต่คุณจะชอบตัวเลขที่ไม่ใช่ยุโรป: fileformat.info/info/unicode/category/Nd/list.htm
xanatos

1

{\ d *: \ d *} ควรใช้งานได้

* หมายถึงการจับคู่เหตุการณ์ก่อนหน้าเป็น 0 หรือมากกว่าซึ่งเป็นตัวเลข

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