문제
나는 모두 삭제하려고 자리에서 문자열입니다.그러나 다음 코드를 삭제 뿐만 아니라 자리에 포함된 어떤 단어를 분명히 나는 원하지 않는 것으로 나타났습니다.내가 하려고 했는데 많은 정규 표현식이다.
감사합니다!
s = "This must not b3 delet3d, but the number at the end yes 134411"
s = re.sub("\d+", "", s)
print s
결과:
이 b 삭제하지만,마지막에 예
해결책
를 추가하기 전에 공간\d+.
>>> s = "This must not b3 delet3d, but the number at the end yes 134411"
>>> s = re.sub(" \d+", " ", s)
>>> s
'This must not b3 delet3d, but the number at the end yes '
편집:후에서 찾는 의견하기로 결정했 양식을 더 완벽한 대답합니다.내 생각에 이것은 모든 경우.
s = re.sub("^\d+\s|\s\d+\s|\s\d+$", " ", s)
다른 팁
이것을 보십시오:
"\b\d+\b"
는 정보를 열람하실 수 있습니다만 그 자리하지 않은 부분의 또 다른 단어입니다.
용 \s
매우 좋지 않기 때문에,처리하지 않는 탭,et al.첫 번째로 절단 더 나은 솔루션입니다:
re.sub(r"\b\d+\b", "", s)
참고하는 패턴은 원시이므로 문자열 \b
일반적으로 백스페이스로 탈출한 문자열이며,우리가 원하는 특별한 단어 경계 regex 탈출 대신 합니다.약간의 애호가 버전입니다:
re.sub(r"$\d+\W+|\b\d+\b|\W+\d+$", "", s)
는 제거하려고 선도/후행 공백이 있을 때는 숫자에 시작/끝의 문자열입니다.I say"시도"기 때문에 여러 개 있는 경우에는 숫자 끝에 그럼 당신은 여전히 공간이 있습니다.
을 처리 숫자 문자열의 시작 부분에 라인을 뿐만 아니라:
s = re.sub(r"(^|\W)\d+", "", s)
는 경우의 번호가 포함의 끝에서 당신의 문자열을 보십시오:니다.서브("\d+$","",s)
그렇지 않으면,당신이 시도할 수 있습니다 니다.서브("(\s)\d+(\s)", "\1\2", s)
조정할 수 있습니다 뒷면 참조하지만 하나 또는 두 개의 공간(\s 의 경기 모든 흰색 분리기)
Non-regex 솔루션:
>>> s = "This must not b3 delet3d, but the number at the end yes 134411"
>>> " ".join([x for x in s.split(" ") if not x.isdigit()])
'This must not b3 delet3d, but the number at the end yes'
분할하여 " "
, 는지 확인합니면 덩어리가 다수에 의해 일 str().isdigit()
, 다음인들이 다시 함께합니다.더 verbosely(를 사용하지 않는 목록의 이해):
words = s.split(" ")
non_digits = []
for word in words:
if not word.isdigit():
non_digits.append(word)
" ".join(non_digits)
I don't know what 의 실제 상황처럼 보이지만,대부분의 답변들과 그 처리하지 않는 부정적인 숫자 또는 소수,
re.sub(r"(\b|\s+\-?|^\-?)(\d+|\d*\.\d+)\b","")
위도 처리해야 합 것,
"이 없어야 합 b3delet3d,그러나 마지막에 예 -134.411"
그러나 이것은 여전히 불완전-당신은 아마 더 완전한 정의할 수 있는 것에서 찾을 기대하는 데 필요한 파일을 분석합니다.
편집:그것은 또한 주목할 가치가 있는'\b'에 따라 변경의 로케일/문자 집합을 사용하도록 해야 합야합니다.
당신이 시도할 수 있습이
s = "This must not b3 delet3d, but the number at the end yes 134411"
re.sub("(\s\d+)","",s)
결과:
'This must not b3 delet3d, but the number at the end yes'
동일한 규칙에도 적용됩
s = "This must not b3 delet3d, 4566 but the number at the end yes 134411"
re.sub("(\s\d+)","",s)
결과:
'This must not b3 delet3d, but the number at the end yes'
>>>s = "This must not b3 delet3d, but the number at the end yes 134411"
>>>s = re.sub(r"\d*$", "", s)
>>>s
"이 없어야 합 b3delet3d,그러나 마지막에 예"
이 제거됩니다 numericals 의 끝에서 문자열입니다.