str = "(a=1)(b=2) (c=3)"
Как было предложено в комментарии по @stribizhev:
r =/
\( # Match a left paren
([^\)]+) # Match >= 1 characters other than a right paren in capture group 1
\) # Match a right paren
/x # extended/free-spacing regex definition mode
str.scan(r).flatten
#=> ["a=1", "b=2", "c=3"]
Примечание ([^\)]+)
может заменить на (.+?)
, что делает его ленивым матч на любые символы, как я сделал в этом альтернативном регулярное выражение, которое использует lookarounds, а не захват группу:
r =/
(?<=\() # Match a left paren in a positive lookbehind
.+? # Match >= 1 characters lazily
(?=\)) # Match a right paren in a positive lookahead
/x
Здесь может быть просмотр назад заменен \(\K
, в котором говорится, «Совпадение ля ft paren, тогда забудьте обо всем, что соответствует до сих пор ».
Наконец, вы можете использовать String#split
на правой, то левой Paren, возможно, разделенных пробелами, а затем удалить первый левый и правый последний Паренс:
str.split(/\)\s*\(/).map { |s| s.delete '()' }
#=> ["a=1", "b=2", "c=3"]
Не было бы хорошо, если бы мы могли написать s.strip(/[()]/)
?
Как вы претендуете регулярное выражение? Из быстрого поиска, похоже, вы должны использовать 'string.scan (/ regex /)'. Кроме того, вы, вероятно, не хотите '. *', Поскольку он жадный и может съесть все ваши данные. Я бы изменил его на '. *?', Или еще лучше, '[^)] +' (совпадение с любым символом, который не является закрывающим). – nickb
Думаю, вам просто нужно ['s.scan (/ \ (([^()] +) \) /)'] (http://rubular.com/r/mct68IbSif). Соответствует ли [этот код] (http://ideone.com/Qwxc6Q) вашим потребностям? –
Нам нужно гораздо лучшее описание того, как вы пробовали: Покажите нам минимальный код, который демонстрирует проблему. Stack Overflow не является сайтом «дать мне код», поэтому мы помогаем вам исправить ваш код. Мы ожидаем, что вы попытались, столкнулись с проблемой, попробовали снова, столкнулись с другим, и как только вы исчерпали свои варианты, спросите. См. Http://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow-users/261593#261593 и [ask]. –