Удалить пробел перед запятой в строке ruby - PullRequest
0 голосов
/ 23 декабря 2009

Эй, я использую выражение reg для удаления скобок и содержимого между ними из строки ruby. Проблема в том, что иногда перед запятыми остается пробел. Я не уверен, как идти об удалении этого места. Я играл со следующим, но он не работал:

 @char_count = 0
 sentance.each_char{|char| 
   if char == ","
     if sentance[@char_count-1] == 32
       sentance[@char_count-1] = "" 
     end
   end
   @char_count += 1
 }

Любая помощь приветствуется!

Редактировать: sentance.gsub! (/, /, ',') Работает хорошо, но теперь я понимаю, что есть некоторые места, где перед запятой есть несколько пробелов. Мне нужно учитывать и этот сценарий.

Ответы [ 8 ]

5 голосов
/ 23 декабря 2009

Для этого вы можете использовать метод gsub класса string.

s = "this is a string, with some commas with spaces in front ,1 ,2 ,3"
s.gsub(/ ,/, ',')
"this is a string, with some commas with spaces in front,1,2,3"

gsub вернет новую строку с пробелом, строка будет заменена запятой. GSUB! заменит строку на месте.

Если у вас иногда есть несколько пробелов с запятой, то вы можете использовать слегка измененное регулярное выражение для захвата нескольких пробелов

s.gsub!(/ +?,/, ',')
2 голосов
/ 23 декабря 2009

Согласно редактированию вопроса, вместо того, чтобы делать

sentance.gsub!(/ ,/, ',')

сделать это

sentance.gsub!(/\s+,/, ',')

это удалит несколько пробелов перед запятыми

1 голос
/ 23 декабря 2009
s.gsub(/\s*,/, ',')  

Приведенное выше регулярное выражение будет искать любое количество пробелов (включая 0), за которыми сразу следует запятая.

Используйте инструмент тестирования, подобный следующему, чтобы проверить свое регулярное выражение: http://www.gskinner.com/RegExr/

0 голосов
/ 20 февраля 2019

Используйте Под регулярное выражение, чтобы заменить пробел между словом и знаком препинания

str = "Okay     . They   , say   ? about. how    ;  you                   ! made the following. special? creature react for further questioning details . I loved Pizza . Definitely . So seven . Yes ."

str.gsub(/\s+(?=[.,;?!])/, "")

Output str = "Okay. They, say? about. how;  you! made the following. special? creature react for further questioning details. I loved Peter. Definitely. So seven. Yes."
0 голосов
/ 26 августа 2015

Я пробую много методов, но лучший способ это:

s.gsub(/[[:space:]]/,'')

это удалит все пробелы.

0 голосов
/ 23 декабря 2009

Вы также можете обрабатывать как удаление выражений в скобках, так и проблему с пробелами в одном регулярном выражении:

 sentence.gsub!(/\s*\([^\)]*\)/, '')

Это также будет обрабатывать случаи, когда у вас есть выражение в скобках, за которым следует другая пунктуация (точка, точка с запятой и т. Д.), Поскольку реальная проблема заключается в пробеле между тем, что предшествует выражению в скобках, и открывающей пареню. Это также оставит любое намеренное использование «,» в тексте, которое не было вызвано удалением выражения в скобках.

0 голосов
/ 23 декабря 2009
sentance.gsub!(/\([^\)]*\)/, '')
sentance.gsub!(/ ,/, ',')
0 голосов
/ 23 декабря 2009

Ruby имеет функцию полосы, это помогает. http://railsforphp.com/reference/strings/trim

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...