더 큰 일련의 작업의 일부로 큰 문자열의 토큰 화 된 부분을 가져 와서 구두점을 제거하거나 단어가 아닌 단어 등을 제거하려고합니다. 초기 시도는 String#gsub
을 사용하고 \W
정규 표현식 문자 클래스, 그래서 같은 :Ruby의 문자열 # gsub, unicode 및 단어가 아닌 문자
my_str = "Hello,"
processed = my_str.gsub(/\W/,'')
puts processed # => Hello
슈퍼, 슈퍼, 슈퍼 간단합니다. 물론, 지금은 비영어권 문자를 다루기 위해 프로그램을 확장하고 있습니다. Ruby의 \W
은 [^A-Za-z0-9_]
과 같은데, 물론 발음 구별 부호 (ü, í 등)가 포함 된 것은 제외됩니다. 그래서, 지금 unpleasent 방법으로 내 이전-간단한 코드 충돌 및 화상 : GSUB
my_str = "Quística."
processed = my_str.gsub(/\W/,'')
puts processed # => Qustica
공지 사항() 친절하게 악센트 "í"문자를 제거했습니다. 이 문제를 해결하기 위해 생각한 한 가지 방법은 더 높은 유니 코드 코드 포인트를 포함하도록 루비의 \ W 화이트리스트를 확장하는 것이지만, 그것들은 엄청나게 많습니다. 그리고 나는 그 중 일부를 놓치고 라인 아래로 문제를 일으킨다는 것을 알고 있습니다. 라틴어 이외의 언어에 대해서도 생각 해보지 않겠습니다 ...). 또 다른 해결책은 내가 구제하고 싶은 모든 것을 블랙리스트에 넣는 것입니다. (구두점, $/%/&/™ 등), 다시 말하지만, 끔찍한 일이 있습니다. 정말로 blacklist-whack-a-mole 게임을 시작하십시오.
아무도이 문제에 대한 원칙적 해결책을 찾았습니까? 아직 발견하지 못한 일부 숨겨진 유니 코드 친화적 인 버전 \W
이 있습니까? 감사!
가. 이미 UTF-8 모드라고 생각했습니다. 도움이되어 주셔서 감사합니다! –