Это отвечает на вопрос, «Я хочу, чтобы заменить апострофы, которые приходят прямо перед или сразу же после запятой».
r =/
(?<=,) # match a comma in a positive lookbehind
\' # match an apostrophe
| # or
\' # match an apostrophe
(?=,) # match a comma in a positive lookahead
/x # free-spacing regex definition mode
aString = "old_tag1,x'old_tag2'x,x'old_tag3','new_tag1','new_tag2'"
aString.gsub(r, '')
#=> => "old_tag1,x'old_tag2'x,x'old_tag3,new_tag1,new_tag2'"
Если цель состоит вместо того, чтобы удалить одиночные кавычки ограждающей подстроку, когда левая цитата в начале строки или непосредственно перед запятой и право котировки в конце строки или сразу же следует запятая, возможны несколько подходов. Один из них - использовать одно модифицированное регулярное выражение, как это сделал @Dimitry. Другим является разделение строки на запятые, обработка каждой строки в результирующем массиве и их объединение модифицированных подстрок, разделенных запятыми.
r =/
\A # match beginning of string
\' # match single quote
.* # match zero or more characters
\' # match single quote
\z # match end of string
/x # free-spacing regex definition mode
aString.split(',').map { |s| (s =~ r) ? s[1..-2] : s }.join(',')
#=> "old_tag1,x'old_tag2'x,x'old_tag3',new_tag1,new_tag2"
Примечание:
arr = aString.split(',')
#=> ["old_tag1", "x'old_tag2'x", "x'old_tag3'", "'new_tag1'", "'new_tag2'"]
"old_tag1" =~ r #=> nil
"x'old_tag2'x" =~ r #=> nil
"x'old_tag3'" =~ r #=> nil
"'new_tag1'" =~ r #=> 0
"'new_tag2'" =~ r #=> 0
Пожалуйста, укажите желаемый результат для вашего примера. –
Кроме того, соглашение Ruby должно использовать [случай змеи] (https://en.wikipedia.org/wiki/Snake_case) для имен локальных переменных и методов. Здесь, например, вы можете использовать 'astring',' a_string' или 'str'. Это просто конвенция, поэтому вам не нужно это делать, но 99% + Rubiest придерживаются конвенции. –
Ваш желаемый результат не соответствует вашему описанию алгоритма. Откуда проходил апостроф после 'new_tag2'? Это не сразу или сразу после запятой, так почему это было удалено? –