Заменить каждую \ n после цифры в рубине - PullRequest
1 голос
/ 24 января 2012

помогите мне, пожалуйста, с регулярным выражением в ruby.

У меня есть текст вроде

1.Привет, мир \ n 2. \ n Доброе утро \ n

Я ожидаю две строки, но в оригинале три строки с плохой 'новой строкой - \ n'персонаж

Вопрос, как заменить' плохой '\ n после' 2. 'и до 'Доброе утро \ n' у меня были проблемы с тысячами таких ошибок

Ответы [ 4 ]

4 голосов
/ 24 января 2012
str.gsub(/(\d\.)\n/, '\1')

заменяет все символы новой строки, перед которыми непосредственно стоит цифра (\d), а точка - только этой цифрой и точкой.

1 голос
/ 29 января 2012

Ответ undur_gongor дает вам то, о чем вы просите, но мне интересно, действительно ли это то, что вам действительно нужно.

Например, что если строка законно заканчивается числом, то точка, например, так:

str = "1. Hello, World\n 2.\n Good Morning\n 3.Today is 29th January 2012.\n 4. This should be a new line.\n"

В итоге вы получите:

"1. Hello, World\n 2. Good Morning\n 3.Today is 29th January 2012. 4. This should be a new line.\n"

Так что вам может быть лучше использовать:

str.gsub(/(^\d+\.|\n\s*\d+\.)\n/, '\1')

^\d+\. часть выражения обнаруживает первую «строку» в строке.Часть \n\s*\d+\. ищет последующие «строки»;он принимает бесконечные пробельные символы перед любым многозначным числом и точкой.

Возможно, он не идеален, но охватывает больше сценариев.Есть ли у вас лучший способ получения данных?Разбор строк для данных - тяжелая работа в лучшие времена;тем более, когда строка плохо отформатирована.

1 голос
/ 24 января 2012

вы можете удалить «плохой» символ новой строки, как этот

string = "1. Hello, World\n 2.\n Good Morning\n"
new_string = string.gsub(/(\d+\.)\n/, '\1') #=> "1. Hello, World\n 2. Good Morning\n"

Удаляет символ новой строки после одной или нескольких цифр, за которыми следует точка.

1 голос
/ 24 января 2012
str.gsub(/(?:\d\.)\n/,'')

Содержимое в скобках в регулярном выражении (цифра, за которой следует точка) сопоставляется, но не фиксируется из-за ?:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...