سؤال

لدي سلسلة مع مجموعة من علامات كسر.

لسوء الحظ فهي غير منتظمة.

<Br> <BR> <br/> <BR/> <br /> إلخ...

أنا أستخدم Nokogiri، لكنني لا أعرف كيف أخبره بتفكيك السلسلة في كل علامة استراحة ....

شكرا.

هل كانت مفيدة؟

المحلول

لذلك لتنفيذ استجابة iftrue:

a = 'a<Br>b<BR>c<br/>d<BR/>e<br />f'
a.split(/<\s*[Bb][Rr]\s*\/*>/)
=> ["a", "b", "c", "d", "e", "f"]

... تركت مع مجموعة من أجزاء من السلسلة بين فواصل HTML.

نصائح أخرى

إذا كنت تستطيع كسر التعبيرات العادية، استخدم الحلمين التالي:

<\s*[Bb][Rr]\s*\/*>

تفسير:

أحد قوس الزاوية اليسرى، صفر أو أكثر من المساحات، ب أو ب، ص أو ص أو ص، صفر أو أكثر من المسافات، صفر أو أكثر أمامية.

لاستخدام Regex، انظر هنا:
http://www.regular-expressions.info/ruby.html.

ومع ذلك 99٪ من البيستو 99٪ من الطريق هناك، إلا أن Nokogiri يدعم إنشاء جزء مستند لا يلف النص في الإعلان:

 text = Nokogiri::HTML::DocumentFragment.parse('<Br>this<BR>is<br/>a<BR/>text<br />string').children.select {|n| n.text? and n.content } 
puts text
# >> this
# >> is
# >> a
# >> text
# >> string

إذا قمت بتحليل السلسلة باستخدام Nokogiri، يمكنك بعد ذلك مسحها من خلاله وتجاهل أي شيء آخر غير العناصر النصية:

require 'nokogiri'
doc = Nokogiri::HTML.parse('a<Br>b<BR>c<br/>d<BR/>e<br />f')
text = []
doc.search('p').first.children.each do |node|
  text << node.content if node.text?
end
p text  # => ["a", "b", "c", "d", "e", "f"]

لاحظ أنه يجب عليك البحث عن علامة P الأولى لأن Nokogiri سوف يلف كل شيء في <!DOCTYPE blah blah><html><body><p>YOUR TEXT</p></body></html>.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top