문제

나는 모두 삭제하려고 자리에서 문자열입니다.그러나 다음 코드를 삭제 뿐만 아니라 자리에 포함된 어떤 단어를 분명히 나는 원하지 않는 것으로 나타났습니다.내가 하려고 했는데 많은 정규 표현식이다.

감사합니다!


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 의 끝에서 문자열입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top