ฉันมีเอกสารที่มี html 100,000 บรรทัดที่เต็มไปด้วยแท็ก <tr> ... </tr>
ที่ไหนสักแห่งภายในชุดแท็กหลายบรรทัดทุกชุดจะมีองค์ประกอบที่มีคำว่า "วัตถุประสงค์" ยกเว้นองค์ประกอบเดียว ฉันจำเป็นต้องค้นหาสตริงแบบยาวของหน้าที่ขึ้นต้นด้วย <tr>
และมีอักขระจำนวนมากก่อนแท็กสิ้นสุด </tr>
และไม่มีอินสแตนซ์ของสตริง "วัตถุประสงค์" ภายในชุดแท็กนั้น ฉันกำลังทำงานกับการค้นหา Notepad++ v7 ด้วย Regex และจับคู่การขึ้นบรรทัดใหม่ การจับคู่สตริง tr เป็นเรื่องง่ายโดยการค้นหาบน <tr>(.*?)</tr>
ซึ่งจะจับคู่แท็กชุดเดียวเท่านั้นที่มีข้อความทั้งหมดที่อยู่ระหว่างนั้น สิ่งที่ฉันทำไม่ได้คือค้นหานิพจน์ที่ค้นหาสตริงนี้ที่ไม่มี "วัตถุประสงค์" อยู่ในนั้น ฉันได้ลอง <tr>(?!.*?"purpose")(.*?)</tr>
ซึ่งจะค้นหาสตริง tr แรกหลังจากอันสุดท้ายที่มี "วัตถุประสงค์" (ใช่ฉันต้องใส่เครื่องหมายคำพูด) และรูปแบบต่างๆ และอ่าน regex เชิงลบ มองไปข้างหน้าและข้างหลังบทช่วยสอน แต่ก็ไม่มีประโยชน์ ฉันมีปัญหาคล้ายกันมากมายกับข้อความนี้ที่ขาดหายไป ดังนั้นขอขอบคุณล่วงหน้าเป็นอย่างยิ่งหากใครมีเบาะแสว่าต้องทำอย่างไร!!!
Regex พร้อม Notepad ++ เพื่อค้นหารูปแบบสตริงที่ไม่รวมสตริงย่อย [ซ้ำกัน]
คำตอบ (1)
นี่ควรทำเคล็ดลับ:
<tr>((?!"purpose").)*?</tr>
โดยพื้นฐานแล้วมัน
- ค้นหาแท็กเปิดและขั้นตอนของตัวละครหลังจากนั้น
- ตรวจสอบเพื่อให้แน่ใจว่าอักขระและอักขระที่ต่อเนื่องกันไม่ตรงกับ "วัตถุประสงค์" (รวมถึงเครื่องหมายคำพูด)
- ก้าวไปข้างหน้าหนึ่งอักขระ และหากยังไม่ถึงแท็กปิด ให้กลับไปที่ 2
- หยุดที่แท็กปิดท้าย
person
Somdudewillson
schedule
18.06.2020
คุณคืออัจฉริยะ. มันได้ผล! แต่ฉันไม่เข้าใจจุดประสงค์ของ .)*? ตัวละครอย่างชัดเจนและเหตุใดจึงทำให้งานนี้สำเร็จ . สำหรับอักขระใด ๆ * ใช้สำหรับหลาย ๆ ตัวและฉันไม่เข้าใจจริงๆว่า ? ในกรณีนี้ถือเป็นเรื่องในทางปฏิบัติ เอ็นจิ้น regex พยายามทำอะไรถ้าคุณเอาหนึ่งในสามสิ่งนี้ออกไป
- person Chris Morgan; 18.06.2020
เกือบแล้ว ฉันแก้ไขส่วนวัตถุประสงค์ที่ขาดหายไปของแถว tr นั้น รันนิพจน์ใหม่ และไม่พบส่วนอื่นใดเลย ยอดเยี่ยม. ไปยังปัญหาถัดไปเกี่ยวกับเอกสาร: ไม่มีไวยากรณ์ในแถว tr บางแถว ฉันใช้สำนวนเดียวกัน แทนที่ไวยากรณ์ของคำด้วยคำว่า วัตถุประสงค์ โดยไม่มีการเปลี่ยนแปลงอื่นๆ และตอนนี้การคลิกค้นหาจะเป็นการเลือกเอกสารทั้งหมด เอกสารไม่ได้ขึ้นต้นหรือลงท้ายด้วยหนึ่งในแท็กเหล่านี้ ดังนั้นฉันจึงไม่รู้ว่าทำไมจึงทำเช่นนี้อย่างต่อเนื่อง ช่วย?
- person Chris Morgan; 18.06.2020
ข้อมูลเพิ่มเติม: ขึ้นอยู่กับคำที่หายไป บางครั้งพบว่าสตริงแท็กนั้นเป็นไปตามที่ต้องการ และบางครั้งก็แค่เลือกทั้งเอกสาร แม้ว่าจะชัดเจนว่าคำนั้นหายไป (ฉันสามารถนับจำนวนครั้งของคำนั้นได้ และน้อยกว่าจำนวนชุดแท็ก tr) ไอเดียเหรอ?
- person Chris Morgan; 18.06.2020
. ทำขั้นตอนที่ 3 โดยก้าว regex ไปข้างหน้าหนึ่งอักขระ * ทำซ้ำขั้นตอนที่ 2 และ 3 และ ? ตรวจสอบให้แน่ใจว่ามีอยู่นอกลูปนั้น และดำเนินการต่อไปยังขั้นตอนที่ 4 เมื่อถึงแท็กปิดท้าย
- person Somdudewillson; 18.06.2020
<tr>((?!\bpurpose\b).)*?</tr>
- person Nick   schedule 18.06.2020