문자열에서 단어 바꾸기-Ruby


281

루비에 문자열이 있습니다.

sentence = "My name is Robert"

복잡한 코드 나 루프를 사용하지 않고이 문장에서 한 단어를 쉽게 바꿀 수있는 방법은 무엇입니까?


어떤 방법으로 교체 하시겠습니까? 임의의 단어 (단어 # 2) 또는 특정 단어 ( my)를 바꾸시겠습니까?
Blender

짧고 간단하며 유용한 질문에 감사드립니다. 그것은 내 견해에서 해시 태그를 스타일링하는 솔루션을 찾는 데 도움이되었습니다
Stef Hej

답변:


494
sentence.sub! 'Robert', 'Joe'

대체 된 단어가 문장에없는 경우 예외가 발생하지 않습니다 ( []=변형).

모든 인스턴스를 교체하는 방법?

위의 "Robert"의 첫 번째 인스턴스 만 대체합니다.

모든 인스턴스를 바꾸려면 gsub/ 를 사용하십시오 gsub!(예 : "전역 대체").

sentence.gsub! 'Robert', 'Joe'

위의 모든 Robert 인스턴스를 Joe로 바꿉니다.


이것은 물론 첫 번째 인스턴스 만 대체하는 것 같습니다. 물론 때로는 훌륭하고 때로는 그렇지 않습니다.
Jason Swett

@JasonSwett는 모든 인스턴스를 교체하는 방법을 다루기 위해 답변을 업데이트했습니다.
srcspider

128

자연어 텍스트를 다루고 문자열의 일부가 아닌 단어를 대체해야하는 경우 일반 텍스트 대체로 인해 비참한 결과가 발생할 수 있으므로 gsub에 정규 표현식을 조금씩 추가해야합니다.

'mislocated cat, vindicating'.gsub('cat', 'dog')
=> "mislodoged dog, vindidoging"

정규식에는 단어의 \b시작 또는 끝과 일치하는 단어 경계가 있습니다 . 그러므로,

'mislocated cat, vindicating'.gsub(/\bcat\b/, 'dog')
=> "mislocated dog, vindicating"

Ruby에서 Javascript와 같은 다른 언어와 달리 단어 경계는 UTF-8과 호환되므로 라틴 이외 또는 확장 라틴 알파벳이있는 언어에 사용할 수 있습니다.

'сіль у кисіль, для весіль'.gsub(/\bсіль\b/, 'цукор')
=> "цукор у кисіль, для весіль"

6
일부 언어는 공백도 사용 \b하지 않으므로 작동하지 않으므로 이러한 경우 형태 분석기 또는 이와 유사한 것을 사용해야합니다. 또한 재미있는 예는 +1입니다.
NiñoScript

57

이 방법으로 시도해 볼 수 있습니다.

sentence ["Robert"] = "Roger"

그러면 문장이됩니다 :

sentence = "My name is Roger" # Robert is replaced with Roger

4
꽤 흥미 롭습니다. 나는이 교체 방법을 본 적이 없다.
Sean Hill

6
원래 문자열에 바꾸려는 단어가 포함되어 있지 않으면이 방법으로 오류가 발생하지 않습니까?
srcspider 2016 년

2
에 다시 전원을 공급하십시오 IndexError. 그렇지 않으면 문장의 일부가 아닌 단어에 대해 다음과 같이 될 것입니다.string not matched (IndexError)
Konrad Reiche

9
이 방법의 또 다른 문제점은 문자열의 첫 번째 인스턴스 만 대체한다는 것입니다.
Martin Konecny

14
이것은 흥미롭지 만 정답으로 표시되어서는 안됩니다.
Niels Abildgaard

46

먼저 Ruby에서 유형을 선언하지 않으므로 첫 번째가 필요하지 않습니다 string.

문자열에서 단어를 바꾸려면 다음을 수행하십시오 sentence.gsub(/match/, "replacement").

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.