2017-12-21 3 views
1

나는 긴 문자열의 목록에서 날짜를 제거하려고합니다. 각 문자열은 날짜를 포함 할 수도 있고 그렇지 않을 수도 있습니다.Regex를 'Str'로 변환하여 파이썬 문자열에서 스트립핑하기

"Jane Doe 76554334 12/15/2017 - 8:35 pm 700945 - SDFTRD $550.95" 

나는 오류 반환하는 방법 구축 : 하나의 문자열의 예는 다음과 같을 수 있습니다

AttributeError: 'NoneType' object has no attribute 'match_object' 

내 목표는 정규식을 찾아왔다 (\d+/\d+/\d+)에 일치하고 일치하는 변환을 .replace()과 함께 사용할 수 있도록 문자열로 변환하십시오. 나는 이것을 match_object을 사용하여 해결할 수 없다.

def replace_match(string): 
    match=re.search(r'(\d+/\d+/\d+)',string) 
    if match: 
     match=re.match(r'(\d+/\d+/\d+)',string).match_object.group(0) 
     print("match = " + match) 
     string = string.replace(match, "") 
    else: 
     print("no match found") 
    return string 

나는 당신이 re.sub 사용할 수 있습니다 파이썬 3.6.3

+0

다른 사람은 try-catch를 사용하여이 [post] (https://stackoverflow.com/questions/9978534/match-dates-using-python-regular-expressions)에서이를 수행해야한다는 것을 알게됩니다. –

답변

5

사용하고 있습니다 :

여기 내 방법입니다

import re 
s = "Jane Doe 76554334 12/15/2017 - 8:35 pm 700945 - SDFTRD $550.95" 
new_s = re.sub('\d+\/\d+\/\d+', '', s) 

출력 :

'Jane Doe 76554334 - 8:35 pm 700945 - SDFTRD $550.95' 

편집, 그 (것)들을 제거 타임 스탬프 :

import re 
s = "Jane Doe 76554334 12/15/2017 - 8:35 pm 700945 - SDFTRD $550.95" 
new_s = re.sub('\d+\/\d+\/\d+|\d+:\d+(?=\spm)|\d+:\d+(?=\sam)', '', s) 

출력 :

\d+:\d+ : 타임 스탬프 제거 정규식에 대한

'Jane Doe 76554334 - pm 700945 - SDFTRD $550.95' 

설명이 일치 시간 후 분 (?=\sam)는 : \d+:\d+이 등록되지 않습니다 것을 의미 긍정적 예측이다 일치하는 문자 다음에 공백이 오는 경우가 아니면 am이며 실제로 타임 스탬프임을 나타냅니다.

\d+:\d+(?=\spm)은 시간 일치가 pm 앞에 오는 지 확인하는 것을 제외하고는 위와 동일합니다. 두 시간 규칙을 고려해야합니다.

+0

그게 효과가! 나는 궁금하지만,'''r '(\ d + \/\ d + \/\ d +)'''형식으로 정규식을 사용하는 데 익숙하다. '''r()''이 왜이 경우에는 필요하지 않은지 당신이 알고 있다면 단지 궁금합니다. – HMLDude

+0

@HMLDude'r' 또는 원시 문자열을 사용하면 인터프리터는 이스케이프 시퀀스의 특수 문자 또는 문자 그대로 모든 ""\ "을 (를) 즉시 처리 할 수 ​​있습니다. 보통의 문자열에서''\ "는 이스케이프 문자로 사용되지 않는 한'"\ "로 간주됩니다. 파이썬의 정규식의 경우, 인터프리터는 원시 문자열로 전달되었는지 여부에 관계없이 여전히 이스케이프 문자로 ""\ "를 평가합니다. – Ajax1234

+0

'\ d +/\ d +/\ d + ''를 사용하면 중복 이스케이프를 피하는 것이 좋습니다. 파이썬 정규식 패턴에서'/'는 결코 특별하지 않습니다. –

관련 문제