我需要匹配输入的文本文件字符串中的一行,并将该捕获的行包裹在一个字符中。
例如想象一个文本文件:
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
答案 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行结尾。