ฉันพยายามทำ regex ง่าย ๆ ที่จะตรวจสอบว่าบรรทัดว่างหรือไม่
กรณี;
" some" // not blank
" " //blank
"" // blank
ฉันพยายามทำ regex ง่าย ๆ ที่จะตรวจสอบว่าบรรทัดว่างหรือไม่
กรณี;
" some" // not blank
" " //blank
"" // blank
คำตอบ:
รูปแบบที่คุณต้องการมีลักษณะเช่นนี้ในโหมดหลายบรรทัด:
^\s*$
คำอธิบาย:
^
เป็นจุดเริ่มต้นของจุดยึดสตริง$
เป็นจุดสิ้นสุดของจุดยึดสตริง\s
เป็นคลาสอักขระช่องว่าง*
คือการทำซ้ำของศูนย์หรือมากกว่าในโหมดหลายบรรทัด^
และ$
ยังจับคู่จุดเริ่มต้นและจุดสิ้นสุดของบรรทัด
นอกจากนี้คุณยังสามารถตรวจสอบว่าสตริงที่กำหนดline
เป็น "ว่าง" (เช่นมี whitespaces เท่านั้น) โดยtrim()
-ing มันแล้วตรวจสอบว่าสตริงที่เกิดisEmpty()
ขึ้น
ใน Java สิ่งนี้จะเป็นดังนี้:
if (line.trim().isEmpty()) {
// line is "blank"
}
โซลูชัน regex ยังสามารถทำให้ง่ายขึ้นโดยไม่ต้องเบรก (เนื่องจากวิธีที่matches
กำหนดไว้ใน Java) ดังต่อไปนี้:
if (line.matches("\\s*")) {
// line is "blank"
}
String String.trim()
boolean String.isEmpty()
true
ถ้าหากว่าเป็นlength()
0
boolean String.matches(String regex)
if line.strip():
เนื่องจากสตริงว่างจะประเมินเป็นFalse
จริง ๆ แล้วในโหมดหลายบรรทัดคำตอบที่ถูกต้องคือ:
/((\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
คำตอบที่ยอมรับ: ^\s*$
ไม่ตรงกับสถานการณ์เมื่อบรรทัดสุดท้ายว่างเปล่า (ในโหมดหลายบรรทัด)
ลองสิ่งนี้:
^\s*$
\s
ยังตรงกับตัวแบ่งบรรทัดดังนั้นคุณจะไม่ "ค้นหา" บรรทัดว่างเปล่าเดียวภายในสตริงที่มีบรรทัดว่างที่ต่อเนื่องกัน
regex แบบพกพาส่วนใหญ่จะ^[ \t\n]*$
ตรงกับสตริงว่าง (โปรดทราบว่าคุณจะต้องแทนที่\t
และ\n
มีแท็บและขึ้นบรรทัดใหม่ตามลำดับ) และ[^ \n\t]
เพื่อจับคู่สตริงที่ไม่ใช่ช่องว่าง
[ \t]
\r
การขึ้นบรรทัดใหม่เพื่อให้ regex เป็น^[ \t\r\n]*$
เช่นนั้น แต่^\s*$
จะดีกว่า - กระชับมากขึ้น หากคุณไม่ต้องการจับคู่บรรทัดใหม่คุณสามารถใช้\h
(หมายถึงช่องว่างในแนวนอน) เช่นเดียวกับใน^\h*$
ให้เครดิตเต็มที่กับbchr02 สำหรับคำตอบนี้ อย่างไรก็ตามฉันต้องปรับเปลี่ยนนิดหน่อยเพื่อจับภาพสถานการณ์สำหรับบรรทัดที่มี*/
(สิ้นสุดความคิดเห็น) ตามด้วยบรรทัดว่าง regex */
ได้รับการจับคู่สายที่ไม่ว่างเปล่ากับ
ใหม่: (^(\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
ทั้งหมดที่ฉันทำคือการเพิ่ม^
เป็นอักขระตัวที่สองเพื่อบ่งบอกจุดเริ่มต้นของบรรทัด
ที่นี่ว่างหมายถึงสิ่งที่คุณหมายถึง
บรรทัดประกอบด้วย whitespaces เต็มหรือบรรทัดไม่มีอะไรเลย
หากคุณต้องการจับคู่บรรทัดที่ไม่มีอะไรให้ใช้ '/ ^ $ /'
ดี ... ฉันแก้ไขมันโดยใช้ notepadd ++) และนี่คือวิธีแก้ปัญหาที่ฉันพบ
\ n \ s
\ n สำหรับจุดสิ้นสุดของบรรทัด (ที่คุณเริ่มจับคู่) - เครื่องหมายรูปหมวกจะไม่ช่วยในกรณีของฉันเนื่องจากจุดเริ่มต้นของแถวเป็นสตริง \ s ใช้พื้นที่ใด ๆ จนถึงสตริงถัดไป
หวังว่ามันจะช่วย
test_vec <- c(" some"," ","")
เวกเตอร์การทดสอบของเรา: วิธีการแก้ปัญหาของคุณ: การแก้ปัญหาการโหวต:grepl("\\n\\s",test_vec) # [1] FALSE FALSE FALSE
grepl("^\\s*$",test_vec) # [1] FALSE TRUE TRUE
โซลูชันที่โหวตให้ผลลัพธ์ที่คาดหวังไม่ใช่ของคุณ
ctrl+f
ใน notepad ++? ในกรณีนี้คุณสามารถค้นหา (แม้ว่าจะไม่ตรงกันจริงๆ) บรรทัดว่างโดยเลือกโหมดการค้นหาแบบ "ขยาย" และค้นหา '\ n \ s' หากคุณเลือก "การแสดงออกปกติ" สตริงของคุณจะตรงกันและคุณสามารถ ลองใช้วิธีแก้ปัญหาของ @polygenelubricants หลังนี้จะตรงกับบรรทัดคุณสามารถตรวจสอบและดูความแตกต่างได้ฉันขอแนะนำให้คุณแก้ไขคำตอบของคุณให้ชัดเจนยิ่งขึ้นเกี่ยวกับสิ่งที่คุณกำลังให้คำแนะนำ มัน