2017-10-03 6 views
1

이것은 꽤 간단해야하지만 대답을 찾지도 못하고 그걸 가지고 올 수 없습니다. 나는 항상 한 개 이상의 후행 자릿수 및 잠재적으로 다른 자릿수가있는 String을가집니다. 모든 후행 숫자를 제외한 문자열에서 모든 것을 제거하고 싶습니다. 위의 테스트 케이스가 0,0,3,1 대신 50,10,123,1가 발생합니다에 대한 그래서 str.replaceAll(".*(\\d)+$","$1")하지만 불행히도 .* 먼저 일치 :후행 숫자를 제외한 모든 것을 대체 할 정규식

몇 가지 예를 들어, 테스트 케이스 :

"1 test50"    -> "50" 
"anothertest10"   -> "10" 
"can contain spaces123" -> "123" 
"ok1"     -> "1" 

나는 가장 눈에 띄는 일을 시도했다.

나는 과거에 거의 사용하지 않았지만 내 문제에 적용하는 방법을 모르지만 뒤에서 무엇인가를 사용해야한다고 생각합니다.

+2

을'참조 정규식 모든 후행 숫자와 일치합니다

\d+$ 

을 사용할 수 있습니다 (.? *) (\ D +) $ '[링크] (https : //로 regex101 .com/r/2pkcev/1) – Gurman

+0

기본적으로 문자열 끝의 숫자는'[0-9] + $'패턴과 일치 할 수 있습니다. 왜 당신은'replaceAll'을 사용하기를 원합니까? 편집 : 당신은뿐만 아니라'str.replaceFirst ("(? s) (? :. * \\ D)? (\\ d +) $", "$ 1")' 문자열에서 줄 바꿈 그러나 그것은보기가 번거롭지 않습니까? –

+0

@Gurman 감사합니다! str.replaceAll (". *? (\\ d +) $", "$ 1")'근무했습니다. –

답변

1

당신이 regex101 demo

+1

나도 알아. ..하지만 대체물을 모두 replaceAll로 제거하는 방법 .. (그냥 제목 대신 질문 설명을 읽었 니? ..) –

+0

왜 모두 바꾸기를 원하십니까? – marvel308

+0

필자는 matcher 반복을 사용하여 Pattern.compile보다 읽기 쉽고 짧다고 개인적으로 생각합니다. Preference I think .. 응답 해 주셔서 고맙지 만,'\\ d + $'가 무엇인지 이미 알고있었습니다. –

관련 문제