2013-04-13 1 views
2

Мне нужно сопоставить строку в строке введенного текстового файла и обернуть захваченную строку символом, например.Ruby regex, соответствующий строке в строке ввода текстового файла

Например представьте текстовый файл, например:

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 

... почему?

Хорошо, так я backspaced последнюю строку текстового файла, и теперь я получаю это ...

Xtest 
Xfoo 
Xbar 
XtestX 
+0

Согласно вашему регулярному выражению, вы ожидаете только тех строк, которые начинаются с теста, но ваш желаемый результат отличается! –

+0

@UpasanaShukla, что вы имеете в виду? Мой примерный код пытается обернуть тест с помощью Xs, поэтому мой вывод должен включать все то же самое с XtestX, и это не так. – Tommy

+0

Посмотрите ваш желаемый результат, в этой замене выполняется в каждой строке, начинается ли она с теста или нет. не так ли? –

ответ

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

Спасибо. Это определенно проблема с \ r's. Я избавился от них, и теперь это работает. – Tommy

0

Он отлично работает для меня в Ruboto IRB на моем телефоне. Не могли бы вы сделать автономный однострочный пример и опубликовать его? Нет необходимости в IO файла. Какую рубиновую версию вы используете?

Я подозреваю, что ваша программа имеет опечатку.

+0

У моей программы определенно нет опечатки Если я напечатаю свою введенную строку, я получу «test \ r \ nfoo \ r \ nbar \ r \ ntest». Не соответствует ли она \ r или что-то? – Tommy

+0

puts "test \ r \ nfoo \ r \ nbar \ r \ ntest" .gsub (/^(.*)$/, 'X \ 1X') , который выводит то, что я показал с помощью Xtest Xfoo Xbar XtestX – Tommy

0

Проблема из-за окончание строки DOS (\ г \ п), поэтому для избавления от этого есть команда flip (в MAC, если я правильно) для преобразования окончаний дос строки для макинтоша окончания строки (\ r). Найдите его и преобразуйте окончательные строки dos в конец строки Mac перед использованием этого текстового файла.

 Смежные вопросы

  • Нет связанных вопросов^_^