반응형
루비는 문자열을 캡처 된 정규식 패턴으로 대체
이것을 Ruby로 번역하는 데 문제가 있습니다.
내가하고 싶은 일을 정확하게하는 JavaScript 조각이 있습니다.
function get_code(str){
return str.replace(/^(Z_.*): .*/,"$1");
}
나는 gsub , sub , replace를 시도 했지만 아무도 내가 기대하는 것을하지 않는 것 같습니다.
내가 시도한 것의 예는 다음과 같습니다.
"Z_sdsd: sdsd".gsub(/^(Z_.*): .*/) { |capture| capture }
"Z_sdsd: sdsd".gsub(/^(Z_.*): .*/, "$1")
"Z_sdsd: sdsd".gsub(/^(Z_.*): .*/, "#{$1}")
"Z_sdsd: sdsd".gsub(/^(Z_.*): .*/, "\1")
"Z_sdsd: sdsd".gsub(/(.).*/) { |capture| capture }
'\1'
대체를 시도하십시오 ( 작은 따옴표 가 중요합니다. 그렇지 않으면을 탈출해야합니다 \
).
"foo".gsub(/(o+)/, '\1\1\1')
#=> "foooooo"
그러나 캡처 그룹에만 관심이있는 것처럼 보이기 때문에 정규 표현식으로 문자열을 색인 할 수 있습니다.
"foo"[/oo/]
#=> "oo"
"Z_123: foobar"[/^Z_.*(?=:)/]
#=> "Z_123"
\1
큰 따옴표로 이스케이프해야합니다. 그래서 당신은 원하는
"Z_sdsd: sdsd".gsub(/^(Z_.*): .*/, "\\1")
또는
"Z_sdsd: sdsd".gsub(/^(Z_.*): .*/, '\1')
"큰 따옴표로 묶인 문자열 인 경우 두 개의 역 참조 앞에 추가 백 슬래시를 추가해야합니다"라는 gsub 문서를 참조하십시오 .
즉, 경기 결과를 원한다면 다음을 수행 할 수 있습니다.
"Z_sdsd: sdsd".scan(/^Z_.*(?=:)/)
또는
"Z_sdsd: sdsd"[/^Z_.*(?=:)/]
참고는 그 (?=:)
비 캡처 그룹 인은 그래서 :
당신의 경기에 표시되지 않습니다.
"foobar".gsub(/(o+)/){|s|s+'ball'}
#=> "fooballbar"
정규식을 사용하여 일부 결과를 필터링해야하고 캡처 그룹 만 사용하는 경우 다음을 수행 할 수 있습니다.
str = "Leesburg, Virginia 20176"
state_regex = Regexp.new(/,\s*([A-Za-z]{2,})\s*\d{5,}/)
# looks for the comma, possible whitespace, captures alpha,
# looks for possible whitespace, looks for zip
> str[state_regex]
=> ", Virginia 20176"
> str[state_regex, 1] # use the capture group
=> "Virginia"
def get_code(str)
str.sub(/^(Z_.*): .*/, '\1')
end
get_code('Z_foo: bar!') # => "Z_foo"
참고 URL : https://stackoverflow.com/questions/9898461/ruby-replace-string-with-captured-regex-pattern
반응형
'Programming' 카테고리의 다른 글
어댑터에서 통화 활동 방법 (0) | 2020.07.29 |
---|---|
UIWebView의 현재 URL 가져 오기 (0) | 2020.07.29 |
Mockito 매처는 어떻게 작동합니까? (0) | 2020.07.28 |
Angular 2에서 경로를 탐색 할 때 로딩 화면 표시 (0) | 2020.07.28 |
C ++에서 int와 long의 차이점은 무엇입니까? (0) | 2020.07.28 |