해시키로 시작하는 하위 문자열을 제외한 모든 항목과 일치하는 정규식

해시키로 시작하는 하위 문자열을 제외한 모든 항목과 일치하는 정규식

'#' 또는 '@'으로 시작하는 하위 문자열을 필터링하는 정규식을 작성 중입니다. 나는 그 트윗을 필터링하려고 노력하고 있습니다. 현재는 문자열에 '#' 또는 '@'으로 시작하는 단어가 포함되어 있는지 여부에 관계없이 모든 항목과 일치합니다.

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

아래 문자열에서 굵게 표시된 모든 항목을 일치시키고 싶지만 더 이상은 일치하지 않습니다.

안녕하세요 샤룩입니다. 다가오는 영화의 공동 배우는 누구입니까?@iamsrk #lovefrommalaysia #askSRK

굵게 표시된 단어 사이의 공백을 유지하고 싶습니다. 어떻게 이를 달성할 수 있나요? 이것은 Python FYI에서 사용됩니다.

답변1

'@' 또는 '#'으로 시작하는 하위 문자열을 제외한 모든 항목을 일치시키지 마세요. 나는 방금 반대 작업을 수행하고 Python에서 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. 긍정적인 예측은 (?=([\r\n ]|$))결과에 포함하지 않고 캐리지 리턴, 새 줄, 공백 또는 문자열 끝을 일치시키려고 시도합니다.

이 솔루션이 얼마나 우아한지는 모르겠지만 제 사용에는 효과적입니다. 그것을 시도regexr.com

관련 정보