regex เพื่อจับคู่ทุกอย่าง แต่สตริงเริ่มต้นด้วย hashkey


0

ฉันกำลังสร้าง regex เพื่อกรองสตริงย่อยใด ๆ ที่ขึ้นต้นด้วย '#' หรือ '@' ฉันพยายามกรองทวีตจากสิ่งเหล่านั้น ขณะนี้มันตรงกับทุกอย่างไม่ว่าสตริงจะมีคำที่ขึ้นต้นด้วย '#' หรือ '@'

((?!\#)|(?!\@)).*

ในสตริงด้านล่างนี้ฉันต้องการจับคู่ทุกอย่างด้วยตัวหนา แต่ไม่ต้องเพิ่มเติม:

สวัสดี shah rukh ใครคือผู้ร่วมแสดงในภาพยนตร์ที่จะมาถึง @iamsrk #lovefrommalaysia #askSRK

ฉันต้องการให้ช่องว่างระหว่างคำเป็นตัวหนา ฉันจะบรรลุสิ่งนี้ได้อย่างไร สิ่งนี้จะถูกใช้ใน python FYI


ปัญหาผกผันที่นี่: superuser.com/q/820361/76571
Excellll

@Excellll นั่นคือสิ่งที่ฉันทำดูคำตอบของฉันด้านล่าง
Linus

คำตอบ:


0

ไม่ต้องคำนึงถึงการจับคู่ทุกอย่างยกเว้นสตริงย่อยที่ขึ้นต้นด้วย '@' หรือ '#' ฉันเพิ่งทำตรงกันข้ามและใช้ re.sub ในหลามเพื่อลบออกจากสตริง:

>>> import re
>>> text = 'Hi shah rukh. Who is your co-actor in the upcoming movie? @iamsrk #lovefrommalaysia #askSRK'
>>> text = re.sub(r'([\#\@].*?)(?=([\r\n ]|$))', '', text).strip()
>>> print text
Hi shah rukh. Who is your co-actor in the upcoming movie?

คำอธิบายสั้น ๆ :

  1. จับคู่กลุ่ม # 1 ([\#\@].*?)กลุ่มอย่างใดอย่างหนึ่ง # หรือ @ พร้อมกับตัวละครน้อยตาม (ไม่ใช่โลภ)
  2. Lookahead เชิงบวก(?=([\r\n ]|$))พยายามจับคู่การขึ้นบรรทัดใหม่ขึ้นบรรทัดใหม่ช่องว่างหรือจุดสิ้นสุดของสตริงโดยไม่รวมผลลัพธ์

ฉันไม่ทราบว่าโซลูชันนี้สวยงามแค่ไหน แต่ก็ใช้ได้กับการใช้งานของฉัน ลองใช้กับregexr.com

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.