Regex เพื่อจับคู่ช่องว่างสีขาวมากกว่า 2 ช่อง แต่ไม่ขึ้นบรรทัดใหม่


90

ฉันต้องการแทนที่ช่องว่างสีขาวมากกว่า 2 ช่องในสตริง แต่ไม่ใช่บรรทัดใหม่ฉันมี regex นี้\s{2,}แต่มันก็จับคู่บรรทัดใหม่ด้วย

ฉันจะจับคู่ช่องว่างสีขาว 2 ช่องขึ้นไปเท่านั้นโดยไม่ขึ้นบรรทัดใหม่ได้อย่างไร

ฉันใช้ c #


@nihcap - อันที่จริง C # ไม่มีรส regex ของตัวเองมันเป็นส่วนหนึ่งของไลบรารีทั่วไป. Net ในกรณีนี้. Net และ C # เป็นแท็กที่มีประโยชน์ทั้งคู่
Kobi

คำตอบ:


164

ใส่อักขระช่องว่างสีขาวที่คุณต้องการจับคู่ภายในคลาสอักขระ ตัวอย่างเช่น:

[ \t]{2,}

จับคู่ช่องว่างหรือแท็บตั้งแต่ 2 ช่องขึ้นไป

คุณยังสามารถทำได้:

[^\S\r\n]{2,}

ซึ่งตรงกับอักขระช่องว่างสีขาวใด ๆ ยกเว้น\rและ\nอย่างน้อยสองครั้ง (โปรดทราบว่าทุนSใน\Sนั้นสั้นสำหรับ[^\s])


คุณหมายถึงอะไร "ย่อมาจาก" ในประโยคสุดท้ายของคุณ? นิพจน์ทั่วไปทั้งหมดจะเป็นอย่างไรหากไม่มีชวเลขนี้
Lonnie Best

5
@Lonnie ดีที่สุดในนิพจน์ทั่วไปสำหรับลำดับที่ใช้ Escape เช่น \ w มักจะเป็นแบบแผนว่าลำดับการหลีกเลี่ยงตัวพิมพ์ใหญ่คือชุดอักขระผกผันของลำดับการหลีกเลี่ยงตัวพิมพ์เล็ก เช่น \ d เป็นผกผันของ \ D, \ s เป็นผกผันของ \ S, \ w เป็นผกผันของ \ W เป็นต้นและในชุดคลาสอักขระที่คั่นด้วย [] เช่น [abc] ก็เป็นไปได้ที่จะระบุ ผกผันโดยใช้ [^ abc] ดังนั้น \ S จึงเทียบเท่ากับ [^ \ s] ซึ่งจะเทียบเท่ากับสัญกรณ์ที่ไม่อนุญาต [^^ \ S] หากได้รับอนุญาต (^^ ไม่ใช่วิธีที่ถูกต้องในการแทนค่าผกผันของผกผัน)
Dejay Clayton

@DejayClayton ขอบคุณฉันไม่รู้เรื่องนั้น
Lonnie Best

คำตอบนี้ใช้ได้ผล แต่เหตุใดการขึ้น\s{2,}บรรทัดใหม่จึงดำเนินการต่อไป ถ้าเป็นอย่างนั้น\n\s{2,}ฉันก็เข้าใจ แล้วทำไมการพิมพ์ช่องว่างตามตัวอักษรในวงเล็บจึงใช้งานได้?
bit-less

"คำตอบนี้ได้ผล แต่เหตุใด {2,} จึงเรียกขึ้นบรรทัดใหม่เพื่อดำเนินการต่อ" เนื่องจาก\sตรงกับช่องว่างแท็บและตัวแบ่งบรรทัด "แล้วทำไมการพิมพ์ช่องว่างตามตัวอักษรในวงเล็บจึงใช้งานได้" เอ้อเพราะมันเป็นเช่นนั้น ไม่รู้จะพูดอะไรอีกเกี่ยวกับเรื่องนั้น :)
Bart Kiers

0

Regex เพื่อกำหนดเป้าหมายเพียงสองช่องว่าง: [] {2,} วงเล็บใน regex คือคลาสอักขระ มีความหมายแค่ตัวอักษรในนั้น ที่นี่เป็นเพียงพื้นที่ วงเล็บปีกกาต่อไปนี้หมายถึงสองครั้งขึ้นไป

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