Ruby正则表达式匹配输入的文本文件字符串中的一行

时间:2013-04-13 19:45:01

标签: ruby regex gsub

我需要匹配输入的文本文件字符串中的一行,并将该捕获的行包裹在一个字符中。

例如想象一个文本文件:

test
foo
test
bar

我想用gsub输出:

XtestX
XfooX
XtestX
XbarX

我在匹配线路时遇到了麻烦。我尝试使用正则表达式以^开头并以$结尾,但它似乎不起作用?有什么想法吗?

我有一个文本文件,其中包含以下内容:

test
foo
test
bag

正在以命令行参数的形式读入文本文件。

所以我得到了(例如只是试图包裹测试)

string = IO.read(ARGV[0])
string = string.gsub(/^(test)$/,'X\1X')

puts string

它输出与文本文件完全相同的内容。

我试过

string = string.gsub(/^(.*)$/, 'X\1X')

输出:

Xtest
Xfoo
Xtest
Xbar

...为什么?

好的,所以我退格了文本文件的最后一行,现在我得到了这个......

Xtest
Xfoo
Xbar
XtestX

3 个答案:

答案 0 :(得分:2)

string = "test\r\nfoo\r\ntest\r\nbar"
string = string.gsub(/^test(?=\r?\n)/, 'X\&X').delete(?\r)
puts string

答案 1 :(得分:0)

我的手机上的Ruboto IRB对我来说很好。你能做一个自包含的单行示例并发布吗?不需要文件IO。你使用什么红宝石版本?

我怀疑你的程序有错字。

答案 2 :(得分:0)

问题是因为dos行结尾(\ r \ n),所以为了摆脱这个,有一个flip命令(在MAC中,如果我是正确的)将dos行结尾转换为mac行结尾(\ r)。在使用该文本文件之前,搜索并将dos行结尾转换为mac行结尾。