ฉันจะมีนิพจน์ทั่วไปที่ทดสอบช่องว่างหรือแท็บ แต่ไม่ขึ้นบรรทัดใหม่ได้อย่างไร ฉันลองแล้ว\s
แต่พบว่ามันทดสอบการขึ้นบรรทัดใหม่ด้วย
ฉันใช้ C # / WPF แต่มันไม่สำคัญ
ฉันจะมีนิพจน์ทั่วไปที่ทดสอบช่องว่างหรือแท็บ แต่ไม่ขึ้นบรรทัดใหม่ได้อย่างไร ฉันลองแล้ว\s
แต่พบว่ามันทดสอบการขึ้นบรรทัดใหม่ด้วย
ฉันใช้ C # / WPF แต่มันไม่สำคัญ
คำตอบ:
ใช้คลาสตัวละคร: [ \t]
\t
?
ลองใช้ชุดอักขระนี้:
[ \t]
สิ่งนี้จับคู่เฉพาะช่องว่างหรือตารางเท่านั้น
ดังที่ @ EiríkrÚtlendiกล่าวไว้โซลูชันที่ยอมรับจะพิจารณาเฉพาะอักขระช่องว่างสองตัวเท่านั้น: แท็บแนวนอน (U + 0009) และช่องว่าง (U + 0020) จะไม่พิจารณาอักขระเว้นวรรคอื่น ๆ เช่นช่องว่างที่ไม่ทำลาย (ซึ่งเกิดขึ้นในข้อความที่ฉันพยายามจัดการ) รายชื่อตัวละครของช่องว่างที่สมบูรณ์มากขึ้นจะรวมอยู่ในวิกิพีเดียและอ้างอิงในคำตอบ Perl เชื่อมโยง โซลูชัน C # อย่างง่ายที่อธิบายถึงอักขระอื่น ๆ เหล่านี้สามารถสร้างได้โดยใช้การลบคลาสอักขระ
[\s-[\r\n]]
หรือรวมถึงโซลูชันของEiríkrÚtlendiคุณจะได้รับ
[\s\u3000-[\r\n]]
หมายเหตุ:สำหรับผู้ที่จัดการกับข้อความ CJK (จีนญี่ปุ่นและเกาหลี) พื้นที่สองไบต์ (Unicode \u3000
) จะไม่รวมอยู่ใน\s
การนำไปใช้งานใด ๆ ที่ฉันได้ลองใช้จนถึงตอนนี้ (Perl, .NET, PCRE, Python) คุณจะต้องทำให้สตริงของคุณเป็นปกติก่อน (เช่นโดยการแทนที่ทั้งหมด\u3000
ด้วย\u0020
) หรือคุณจะต้องใช้ชุดอักขระที่มีจุดรหัสนี้นอกเหนือจากช่องว่างอื่น ๆ ที่คุณกำหนดเป้าหมายเช่น[ \t\u3000]
ช่องว่างที่คุณกำหนดเป้าหมายเช่น
หากคุณใช้ Perl หรือ PCRE คุณมีตัวเลือกในการใช้\h
ชวเลขสำหรับช่องว่างแนวนอนซึ่งดูเหมือนจะรวมช่องว่างแบบไบต์เดียวช่องว่างแบบไบต์คู่และแท็บอื่น ๆ ดูช่องว่างที่ตรงกัน แต่ไม่ขึ้นบรรทัดใหม่ (Perl)หัวข้อขึ้นสำหรับรายละเอียดเพิ่มเติม
อย่างไรก็ตาม\h
ยังไม่มีการนำชวเลขนี้มาใช้กับ. NET และ C # อย่างที่ดีที่สุดที่ฉันสามารถบอกได้
\h
(แนะนำใน Java 8) จะรวมไว้\u3000
ด้วย แต่\s
จะไม่รวมอยู่ด้วยเว้นแต่คุณจะตั้งค่าโหมด UNICODE_CHARACTER_CLASS (แนะนำใน Java 7)
หากคุณต้องการแทนที่ช่องว่างด้านล่างรหัสที่ใช้งานได้สำหรับฉันC#
Regex.Replace(Line,"\\\s","");
สำหรับ Tab
Regex.Replace(Line,"\\\s\\\s","");
\h
คลาสอักขระperl เท่านั้นแต่จะแสดงว่ามีช่องว่างอื่น ๆ อีกมากมายในกรณีที่คุณต้องเพิ่มลงในรายการที่นี่