Как извлечь значения из фрагмента XML с помощью регулярного выражения Ruby - PullRequest
1 голос
/ 25 декабря 2010

У меня есть эта строка:

"lorem <tt>text1</tt> ipsum <tt>text2</tt>dolor si amet"

Мне нужно извлечь текст между <tt>...</tt> в массив, я пробовал с:

"lorem <tt>text1</tt> ipsum <tt>text2</tt>dolor si amet".scan(/<tt>(.*)<\/tt>/)

но без удачи ...

Ответы [ 2 ]

4 голосов
/ 26 декабря 2010

Гораздо лучше использовать парсер, даже с крошечным фрагментом, если только вы не уверены, что строка никогда не изменит формат, и вам не принадлежит процесс от начала до конца.

Тем не менее,чтобы удовлетворить ваши требования регулярных выражений, я бы использовал String.scan:

str = "lorem <tt>text1</tt> ipsum <tt>text2</tt>dolor si amet"

str.scan(%r{<tt>([^<]+)</tt>}).flatten # => ["text1", "text2"]

Просто чтобы показать, насколько просто использовать парсер:

require 'nokogiri'
doc = Nokogiri::HTML(str)
doc.css('tt').map(&:text) # => ["text1", "text2"]

Преимущество - гибкость и надежность,

2 голосов
/ 26 декабря 2010

Попробуйте .scan(/<tt>(.*?)<\/tt>/)

Здесь *? - это так называемый «квантификатор с неохотой».

s = "lorem <tt>text1</tt> ipsum <tt>text2</tt>dolor si amet"
puts s.scan(/<tt>(.*?)<\/tt>/).inspect #  => [["text1"], ["text2"]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...