2013-08-13 3 views
0

Я хочу извлечь назначенные значения в строке.Как извлечь их из текста

"a=b xxxxxx c = d xxxxxxxxx e= f g =h" 

Как это в Рубине с помощью Regex

["a=b","c=d","e=f", "g=h"] 

Я пробовал:

'a= b sadfsf c= d'.scan(/\w=(\w+)/) 
+0

Пытались ли вы что-нибудь? –

+0

Хммм.Да, я пробовал Как это 'a = b sadfsf c = d'.scan (/ \ w = \ (\ w +) /). Я не так хорошо разбираюсь в regex –

+0

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

ответ

4
"a=b xxxxxx c = d xxxxxxxxx e= f g =h" 
.scan(/(\w+)\s*=\s*(\w+)/).map{|kv| kv.join("=")} 

# => ["a=b", "c=d", "e=f", "g=h"] 
+0

Я думаю, что часть перед равными всегда является единственным символом (при условии, что первое регулярное выражение просто отсутствовало пробелы), хотя это не на 100% ясно. К OP: биты, отсутствующие в вашем запрограммированном регулярном выражении, были следующими: 1) разрешение любого количества пробелов (с использованием '\ s *') и 2) запоминание для захвата обеих частей текста. –

1

Он расщепляет строку с регулярным выражением, а затем он сохраняет его в массиве

Затем он удаляет пустое пространство вокруг знака =

str = "a=b xxxxxx c = d xxxxxxxxx e= f g =h" 
results = str.scan(/[\w]+\s*\=\s*[\w]+/) 
results.each { |x| x.gsub!(/\s+/, "")} 
+0

Вам нужно «x.gsub!», Чтобы изменить строки на месте или карту вместо каждого. Если это исправлено, это действительная альтернатива принятому ответу и стоит +1 –

+0

@NeilSlater Спасибо за уловку и дополнение =) –

0
s = "a=b xxxxxx c = d xxxxxxxxx e= f g =h" 
s.scan(/[[:alpha:]][[:blank:]]*=[[:blank:]]*[[:alpha:]]/).map{|e| e.delete(" ")} 
# => ["a=b", "c=d", "e=f", "g=h"] 
Смежные вопросы