java 正则表达式提取字符串_018 Ruby 正则表达式批量提取指定字符串之间文字

042aefb74dcc669abcf994a6ab53b844.png

今天,在正式讲解之前,先给大家安利一个Ruby界面开发工具。

我们平时使用脚本语言,最大的用处就是帮助我们批量完成一些纯手工操作。

不是去专门开发ERP或者其他大型管理系统,我们真正需要一个小而美,短而精的GUI工具。

纵观Ruby的GUI工具,有Tk,Qt,Wxruby,Fxruby,Gtk2.0+等等一些。

我在win7下安装这些GUI,着实花了一些时间。

可能我操作不当,上面这几个,只有Fxruby能和我的Ruby2.7兼容。

但是,这个Fxruby还不是我想要的工具。

我在网上搜索Ruby GUItookit的时候,发现了一个GUI,他是Shoes。

没错,Ruby Shoes,这个工具的简介我不想多讲。

这个GUI和其他的不太一样。

当我们在程序里编写好程序时,还需要Shoes.app...end嵌套。

除此之外,还需要用Shoes主程序打开。

也许这是为了防止我们误操作,打开不明来历的Ruby文件,进而导致系统崩溃的原因吧。

话不多说,跟我一起下载安装。

根据我的经验,你需要安装Shoes3.3.6版本。

Shoes3.3.7(最新版本)在使用的时候会出现鼠标偏移的问题。

ec2ba65e9824a8b6f9a797b8b837f594.png

下载

1f30347f10dd5a549bf3fe9a7c2efb1e.png

ae6ba413dc62dd7dd1e7ab1c2ae78e25.png
主程序

13f1c7c9030244f9f98f46f0062f9b9a.png
目录选择

d80b2894e51dfdcb39b6aa240a6f7ce6.png
说明文档

e0f71ef07f802e3b5ac3bb6dbcadea26.png
子界面

为了让你理解,我选择这个工具的原因。

这次,我就用这个GUI开发一个TXT文字提取器。

d93041947e73f846cf0e9ef2f9f60c3a.png

477b8e470938fdf8a41df5b6fb7c2a68.png

我们把Shoes官方手册里的代码演示提取出来。

细心的你会发现,这些代码之间是用{{{...}}}三对大括号包裹在一起的。

因此我们使用正则表达式,就会很容易把演示代码提取出来。

界面设计

(一)控件对象

1.Shoes主程序控件

# 生成主程序窗体

shoes.app do
end

2.文本控件

# 生成一段文字独占一行

para 

3.button控件

# 生成按钮控件
button do
end

4.edit_line控件

# 生成单行输入框
edit_line

5.stack控件

# 用于分割窗体或者组合控件,成为控件载体。
stack do
end

(二)方法

方法有两种表示方式。

# 四周边距增加30
:margin=>30
# 上边距增加30
:margin_top=>30
# 下边距增加30     
:margin_bottom=>30
# 左边距增加30
:margin_left=>30
# 右边距增加30
:margin_right=>30
# 宽度为470
width:470
# 高度为100
height:100

由此可见,你可以使用 :

方法名=>数值,,或者方法名:数值的方式使用方法设置控件的属性值。

ask_open_file,这是一个特殊的方法,用于弹框选择文件,他的返回值是 文件绝对路径

我们经常使用的 "#{fname}" 方式对变量进行赋值。

fname=ask_open_file
@el1.text="#{fname}"

ask_open_file返回的路径大多是 文件名.后缀,我们经常使用gsub(//, '/')方法把“”转换为“/”。

这一点,是我们使用Ruby编程需要注意的。

(三)属性

@el3=edit_line
argument2=@el3.text

我们使用@+变量名,使之成为实例变量,便于我们将其赋值给参数。

(四)程序逻辑

我们在Shoes.app外定义一个方法,用于将路径变量,开始、结束标记参数传入方法内执行。

def Shoes.extract(path,argument1,argument2)
end

File.dirname(__FILE__)获取当前路径,生成目标文件名。

textfile = File.dirname(__FILE__)+"/extract.txt"

读取源文件。

data = File.read(path)

正则表达式用于匹配{{{...}}}之间内容。

regex=/#{argument1}((w|W)*?)#{argument2}/

使用“w”模式打开文件,针对每一行执行语句块。

即,文件不存在,则创建文件,存在则清空文件。

File.open(textfile, "w") do |f|
end

将正则匹配到的内容依次写入文件。

data.scan(regex).each{|m|f.write" #{m[0]}"}

代码展示

# Ruby
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值