Gar*_*old 7 php ruby regex codeigniter ruby-on-rails-3
好吧,我有一个表,由一些开源软件输出,但它不会以实际的表格格式输出,例如
<table>
<thead>
<td>Heading</td>
<thead>
<tbody>
<tr>
<td>Content</td>
</tr>
<tbody>
</table
Run Code Online (Sandbox Code Playgroud)
相反,开发软件的人决定输出这样的表是一个好主意
+------------+-------------+-------+-------------+------------+---------------+----------+
| HEADING 1 | HEADING 2 | ETC | ANOTHER | HEADING3 | HEADING4 | SML |
+------------+-------------+-------+-------------+------------+---------------+----------+
| content | more content | cont | More more | content | content 2.0 | litl |
| content | more content | cont | More more | content | content 2.0 | litl |
| content | more content | cont | More more | content | content 2.0 | litl |
| content | more content | cont | More more | content | content 2.0 | litl |
| content | more content | cont | More more | content | content 2.0 | litl |
| content | more content | cont | More more | content | content 2.0 | litl |
| content | more content | cont | More more | content | content 2.0 | litl |
| content | more content | cont | More more | content | content 2.0 | litl |
+------------+-------------+-------+-------------+------------+--------------+----------+
| TOTALS AGENTS:21 | total| total| total| total| total|
+------------+-------------+-------+-------------+------------+--------------+----------+
Run Code Online (Sandbox Code Playgroud)
所以我不能建立一个网络刮板来获取数据,或者我不能保证,如果我可以构建一个刮刀来刮除它,因为它全部包裹在一个<pre> </pre>标签内.所以相反,我一直在尝试使用ruby和Regex来尝试完成工作到目前为止我已经设法让所有领先|者都出局并且我已经设法获得标题+-------+-----但是只有那么远,因为它似乎我有重复模式整个时间它不想重复自己好但是现在说话足够这是我到目前为止使用的代码
text.lines.to_a.each do |line|
line.sub(/^\| |^\+*-*\+*\-*/) do |match|
puts "Regexp Match: " << match
end
STDIN.getc
puts "New Line "<< line
end
Run Code Online (Sandbox Code Playgroud)
例如,第一行的输出只有+-----------------+----------
它是CSV格式,所以我用它Gsub来替换剩下|的,'s
我可以使用PHP或Ruby,所以任何答案都非常受欢迎
这是 ruby 中的完整解决方案。不过,您需要手动将 a 添加|到最后一行。
require 'builder'
table = '+------------+-------------+-------+-------------+------------+---------------+----------+
| HEADING 1 | HEADING 2 | ETC | ANOTHER | HEADING3 | HEADING4 | SML |
+------------+-------------+-------+-------------+------------+---------------+----------+
| content | more content | cont | More more | content | content 2.0 | litl |
| content | more content | cont | More more | content | content 2.0 | litl |
| content | more content | cont | More more | content | content 2.0 | litl |
| content | more content | cont | More more | content | content 2.0 | litl |
| content | more content | cont | More more | content | content 2.0 | litl |
| content | more content | cont | More more | content | content 2.0 | litl |
| content | more content | cont | More more | content | content 2.0 | litl |
| content | more content | cont | More more | content | content 2.0 | litl |
+------------+-------------+-------+-------------+------------+--------------+----------+
| TOTALS AGENTS:21 | total| total| total| total| total|
+------------+-------------+-------+-------------+------------+--------------+----------+';
def parse_table(table)
rows = []
table.each_line do |line|
next if line.match /^\+/
rows << line.split(/\s*\|\s*/).reject(&:empty?)
end
rows
end
def html_row(xml, columns)
xml.tr do
columns.each do |column|
xml.td column
end
end
end
def html_table(rows)
head_row = rows.first
body_rows = rows[1..-1]
xml = Builder::XmlMarkup.new :indent => 2
xml.table do
xml.thead do
html_row xml, head_row
end
xml.tbody do
body_rows.each do |body_row|
html_row xml, body_row
end
end
end.to_s
end
rows = parse_table(table)
html = html_table(rows)
puts html
Run Code Online (Sandbox Code Playgroud)
输出:
<table>
<thead>
<tr>
<td>HEADING 1</td>
<td>HEADING 2</td>
<td>ETC</td>
<td>ANOTHER</td>
<td>HEADING3</td>
<td>HEADING4</td>
<td>SML</td>
</tr>
</thead>
<tbody>
<tr>
<td>content</td>
<td>more content</td>
<td>cont</td>
<td>More more</td>
<td>content</td>
<td>content 2.0</td>
<td>litl</td>
</tr>
<tr>
<td>content</td>
<td>more content</td>
<td>cont</td>
<td>More more</td>
<td>content</td>
<td>content 2.0</td>
<td>litl</td>
</tr>
<tr>
<td>content</td>
<td>more content</td>
<td>cont</td>
<td>More more</td>
<td>content</td>
<td>content 2.0</td>
<td>litl</td>
</tr>
<tr>
<td>content</td>
<td>more content</td>
<td>cont</td>
<td>More more</td>
<td>content</td>
<td>content 2.0</td>
<td>litl</td>
</tr>
<tr>
<td>content</td>
<td>more content</td>
<td>cont</td>
<td>More more</td>
<td>content</td>
<td>content 2.0</td>
<td>litl</td>
</tr>
<tr>
<td>content</td>
<td>more content</td>
<td>cont</td>
<td>More more</td>
<td>content</td>
<td>content 2.0</td>
<td>litl</td>
</tr>
<tr>
<td>content</td>
<td>more content</td>
<td>cont</td>
<td>More more</td>
<td>content</td>
<td>content 2.0</td>
<td>litl</td>
</tr>
<tr>
<td>content</td>
<td>more content</td>
<td>cont</td>
<td>More more</td>
<td>content</td>
<td>content 2.0</td>
<td>litl</td>
</tr>
<tr>
<td>TOTALS AGENTS:21</td>
<td>total</td>
<td>total</td>
<td>total</td>
<td>total</td>
<td>total</td>
</tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
209 次 |
| 最近记录: |