ค้นหาและแทนที่ด้วยช่องว่างที่แทรกไว้

ฉันมีสตริงเช่นนี้ในไฟล์ข้อความ:

10.Divide using the divider at 12C. and pressure at 3.0.
11.Form into cylinders and put on boards, don't handle too much.

Regex (\d+\.)[A-Z] นี้ค้นหาค่าตัวเลขได้อย่างถูกต้อง ตามด้วยจุด ตามด้วยตัวพิมพ์ใหญ่

ฉันต้องการแทรกช่องว่างระหว่างจุดและตัวพิมพ์ใหญ่ ฉันจะทำอย่างไร?


person Kirk P.    schedule 11.11.2015    source แหล่งที่มา


คำตอบ (2)


คุณอยู่ที่นั่นเป็นส่วนใหญ่ เมื่อคุณรวมนิพจน์ย่อย regex ไว้ในวงเล็บ คุณจะอ้างอิงได้ในช่อง "แทนที่" ของการดำเนินการค้นหาและแทนที่ ดังนั้น...

Find what: (\d+.)([A-Z])
Replace with: \1 \2

(ดูคำถามที่คล้ายกันเช่นคำถามนี้)

person jdzions    schedule 11.11.2015
comment
จุดคืออักขระพิเศษในรูปแบบที่หมายถึงอักขระใดๆ หากคุณต้องการจับคู่จุดตามตัวอักษร คุณต้องหลีกเลี่ยงจุดนั้น: \. - person Casimir et Hippolyte; 11.11.2015
comment
นี่เป็นเคล็ดลับ: ค้นหา: (\d+\.)([A-Z]) แทนที่ \1 \2 ฉันไม่เคยล้อม [A-Z] ไว้ในวงเล็บมาก่อน ซึ่งเป็นสาเหตุที่ทำให้ฉันประสบปัญหา - person Kirk P.; 11.11.2015

จริงๆ แล้ว regex ของคุณผิด:

(\d+.)[A-Z] จับคู่ตัวเลขที่ปรากฏตั้งแต่ 1 หลักขึ้นไป ตามด้วยอักขระใดๆ . ใน regex หมายถึงอักขระใดๆ กลุ่มที่ถูกต้องกว่าควรเป็น \d+\.[A-Z] (ละเว้นกลุ่มด้วยเนื่องจากไม่จำเป็นสำหรับการจับคู่ โปรดทราบว่า . จะถูกหลีกไว้)

เพื่อแทรกช่องว่าง นอกเหนือจากวิธีแก้ปัญหาที่ได้รับจากคำตอบอื่นโดยใช้ 2 กลุ่ม: เช่น ค้นหา (\d+\.)([A-Z]) (สังเกตจุดคงที่) และแทนที่ด้วย \1 \2 คุณยังอาจพิจารณาใช้คุณลักษณะ lookaround:

ค้นหา (?<=\d\.)(?=[A-Z]) และแทนที่ด้วย (ช่องว่างเดียว) regex นี้ค้นหาจุดที่นำหน้าด้วยตัวเลขแล้วตามด้วยจุด และตามด้วยตัวพิมพ์ใหญ่ จากนั้นเราจะแทนที่จุดนั้นด้วยช่องว่าง (โปรดทราบว่ากลุ่ม lookahead และ lookbehind จะไม่รวมอยู่ในผลลัพธ์ "ตรงกัน")

person Adrian Shum    schedule 11.11.2015