Разделить строку из второго вхождения символа - PullRequest
8 голосов
/ 11 мая 2011

Как отделить строку от второго вхождения символа

str = "20050451100_9253629709-2-2"

I need the output 
["20110504151100_9253629709-2", "2"]

Ответы [ 6 ]

12 голосов
/ 11 мая 2011

Нет ничего похожего на одну строку:)

str.reverse.split('-', 2).collect(&:reverse).reverse

Он перевернет строку, разделив ее на '-', и, таким образом, вернет 2 элемента (материал перед первым '-' и все, что за ним следует), прежде чем перевернуть оба элемента и затем сам массив.

Редактировать

*before, after = str.split('-')
puts [before.join('-'), after]
4 голосов
/ 11 мая 2011

Вы можете использовать совпадение регулярного выражения:

str = "20050451100_9253629709-2-2"
m = str.match /(.+)-(\d+)/
[m[1], m[2]]  # => ["20050451100_9253629709-2", "2"]

Регулярное выражение соответствует «что-нибудь», за которым следует тире, за которой следуют цифры.

4 голосов
/ 11 мая 2011

Если у вас всегда есть два дефиса, вы можете получить последний индекс -:

str = "20050451100_9253629709-2-2"
last_index = str.rindex('-')

# initialize the array to hold the two strings
arr = []

# get the string characters from the beginning up to the hyphen
arr[0] = str[0..last_index]
# get the string characters after the hyphen to the end of the string
arr[1] = str[last_index+1..str.length]
3 голосов
/ 11 мая 2011
"20050451100_9253629709-2-2"[/^([^-]*\-[^-]*)\-(.*)$/]
[$1, $2] # => ["20050451100_9253629709-2", "2"]

Это будет соответствовать любой строке, разбивая ее на второе вхождение -.

2 голосов
/ 11 мая 2011

Вы можете разделить его на части и снова соединить:

str = "20050451100_9253629709-2-2"
a = str.split('-')
[a[0..1].join('-'), a[2..-1].join('-')]
0 голосов
/ 29 июня 2019
string.gsub(/^[^-]+-[^-]+-/,'')
  1. ^ это начало
  2. [^-] - один символ, кроме тире
  3. [^-]+ делает элемент 2 одним или несколькими одиночными символами, кроме тире
  4. - - тире
  5. [^-]+- повторение выше
  6. Использование gsub удаляет символы, соответствующие шаблону
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...