0

</tag>欠落している各行に追加したい:

text = '<tag>line 1</tag>
        <tag>line2         # no closing tag, append
        <tag>line3         # no closing tag, append
             line4</tag>   # no opening tag, but has a closing tag, so ignore
        <tag>line5</tag>'

これに一致する正規表現を作成しようとしましたが、間違っていることはわかっています:

text.gsub! /.*?(<\/tag>)Z/, '</tag>'

各行を条件付きで追加する正規表現を作成するにはどうすればよいですか?

4

4 に答える 4

0

機能する可能性のあるものは次のとおりです。

/<tag>[^\n ]+[^>][\s]*(\n)/

これは、改行文字の前に ">" を付けずにすべての改行文字を返します。

「\n」に置き換えます。

text.gsub!( /<tag>[^\n ]+[^>][\s]*(\n)/ , "</tag>\n")

さらに磨きをかけるには、 http://rubular.com/を試してください。

于 2013-08-23T22:06:58.057 に答える
0
text = '<tag>line 1</tag>
        <tag>line2        
        <tag>line3
        line4</tag>
        <tag>line5</tag>'

result = ""

text.each_line do |line|
  line.rstrip!
  line << "</tag>" if not line.end_with?("</tag>")
  result << line << "\n"
end

puts result

--output:--
<tag>line 1</tag>
        <tag>line2</tag>
        <tag>line3</tag>
        line4</tag>
        <tag>line5</tag>
于 2013-08-24T05:31:50.573 に答える