Regex พร้อม Notepad ++ เพื่อค้นหารูปแบบสตริงที่ไม่รวมสตริงย่อย [ซ้ำกัน]

ฉันมีเอกสารที่มี html 100,000 บรรทัดที่เต็มไปด้วยแท็ก <tr> ... </tr> ที่ไหนสักแห่งภายในชุดแท็กหลายบรรทัดทุกชุดจะมีองค์ประกอบที่มีคำว่า "วัตถุประสงค์" ยกเว้นองค์ประกอบเดียว ฉันจำเป็นต้องค้นหาสตริงแบบยาวของหน้าที่ขึ้นต้นด้วย <tr> และมีอักขระจำนวนมากก่อนแท็กสิ้นสุด </tr> และไม่มีอินสแตนซ์ของสตริง "วัตถุประสงค์" ภายในชุดแท็กนั้น ฉันกำลังทำงานกับการค้นหา Notepad++ v7 ด้วย Regex และจับคู่การขึ้นบรรทัดใหม่ การจับคู่สตริง tr เป็นเรื่องง่ายโดยการค้นหาบน <tr>(.*?)</tr> ซึ่งจะจับคู่แท็กชุดเดียวเท่านั้นที่มีข้อความทั้งหมดที่อยู่ระหว่างนั้น สิ่งที่ฉันทำไม่ได้คือค้นหานิพจน์ที่ค้นหาสตริงนี้ที่ไม่มี "วัตถุประสงค์" อยู่ในนั้น ฉันได้ลอง <tr>(?!.*?"purpose")(.*?)</tr> ซึ่งจะค้นหาสตริง tr แรกหลังจากอันสุดท้ายที่มี "วัตถุประสงค์" (ใช่ฉันต้องใส่เครื่องหมายคำพูด) และรูปแบบต่างๆ และอ่าน regex เชิงลบ มองไปข้างหน้าและข้างหลังบทช่วยสอน แต่ก็ไม่มีประโยชน์ ฉันมีปัญหาคล้ายกันมากมายกับข้อความนี้ที่ขาดหายไป ดังนั้นขอขอบคุณล่วงหน้าเป็นอย่างยิ่งหากใครมีเบาะแสว่าต้องทำอย่างไร!!!


person Chris Morgan    schedule 18.06.2020    source แหล่งที่มา
comment
ลอง <tr>((?!\bpurpose\b).)*?</tr>   -  person Nick    schedule 18.06.2020
comment
ขอบคุณสำหรับคำตอบนิค คำตอบ @Somdudewillson ใช้งานได้ ฉันคิดว่ารูปแบบขอบเขตคำ \b จะมีประโยชน์สำหรับงานอื่น ๆ ที่ฉันมี   -  person Chris Morgan    schedule 18.06.2020


คำตอบ (1)


นี่ควรทำเคล็ดลับ:

<tr>((?!"purpose").)*?</tr>

โดยพื้นฐานแล้วมัน

  1. ค้นหาแท็กเปิดและขั้นตอนของตัวละครหลังจากนั้น
  2. ตรวจสอบเพื่อให้แน่ใจว่าอักขระและอักขระที่ต่อเนื่องกันไม่ตรงกับ "วัตถุประสงค์" (รวมถึงเครื่องหมายคำพูด)
  3. ก้าวไปข้างหน้าหนึ่งอักขระ และหากยังไม่ถึงแท็กปิด ให้กลับไปที่ 2
  4. หยุดที่แท็กปิดท้าย
person Somdudewillson    schedule 18.06.2020
comment
คุณคืออัจฉริยะ. มันได้ผล! แต่ฉันไม่เข้าใจจุดประสงค์ของ .)*? ตัวละครอย่างชัดเจนและเหตุใดจึงทำให้งานนี้สำเร็จ . สำหรับอักขระใด ๆ * ใช้สำหรับหลาย ๆ ตัวและฉันไม่เข้าใจจริงๆว่า ? ในกรณีนี้ถือเป็นเรื่องในทางปฏิบัติ เอ็นจิ้น regex พยายามทำอะไรถ้าคุณเอาหนึ่งในสามสิ่งนี้ออกไป - person Chris Morgan; 18.06.2020
comment
เกือบแล้ว ฉันแก้ไขส่วนวัตถุประสงค์ที่ขาดหายไปของแถว tr นั้น รันนิพจน์ใหม่ และไม่พบส่วนอื่นใดเลย ยอดเยี่ยม. ไปยังปัญหาถัดไปเกี่ยวกับเอกสาร: ไม่มีไวยากรณ์ในแถว tr บางแถว ฉันใช้สำนวนเดียวกัน แทนที่ไวยากรณ์ของคำด้วยคำว่า วัตถุประสงค์ โดยไม่มีการเปลี่ยนแปลงอื่นๆ และตอนนี้การคลิกค้นหาจะเป็นการเลือกเอกสารทั้งหมด เอกสารไม่ได้ขึ้นต้นหรือลงท้ายด้วยหนึ่งในแท็กเหล่านี้ ดังนั้นฉันจึงไม่รู้ว่าทำไมจึงทำเช่นนี้อย่างต่อเนื่อง ช่วย? - person Chris Morgan; 18.06.2020
comment
ข้อมูลเพิ่มเติม: ขึ้นอยู่กับคำที่หายไป บางครั้งพบว่าสตริงแท็กนั้นเป็นไปตามที่ต้องการ และบางครั้งก็แค่เลือกทั้งเอกสาร แม้ว่าจะชัดเจนว่าคำนั้นหายไป (ฉันสามารถนับจำนวนครั้งของคำนั้นได้ และน้อยกว่าจำนวนชุดแท็ก tr) ไอเดียเหรอ? - person Chris Morgan; 18.06.2020
comment
. ทำขั้นตอนที่ 3 โดยก้าว regex ไปข้างหน้าหนึ่งอักขระ * ทำซ้ำขั้นตอนที่ 2 และ 3 และ ? ตรวจสอบให้แน่ใจว่ามีอยู่นอกลูปนั้น และดำเนินการต่อไปยังขั้นตอนที่ 4 เมื่อถึงแท็กปิดท้าย - person Somdudewillson; 18.06.2020