Я пытался создать рубин regex, который соответствует конечным пробелам - но не заполнители добавления отступа - таким образом, я могу gsub их.
У меня было это /\b[\t ]+$/
и это работало обработка, пока я не понял, что это только работает, когда концы строки [a-zA-Z]
.:-( Таким образом, я развил его в это /(?!^[\t ]+)[\t ]+$/
и кажется, что это - улучшение, но это все еще не работает правильно. Я провел часы, пытаясь заставить это работать напрасно. Помогите.
Вот некоторый текстовый тест, таким образом, легко бросить в Rubular, но строки отступа становятся разделенными, таким образом, будет требоваться несколько пробелов и/или вкладок. После того как строки 3 и 4 имеют пробелы, въезжают задним ходом, это не должно соответствовать на строках 3-5, 7, 9.
some test test
some test test
some other test (text)
some other test (text)
likely here{ dfdf }
likely here{ dfdf }
and this ;
and this ;
С другой стороны, существует ли более простое / более изящный способ сделать это?
Если вы используете 1.9, вы можете использовать ретроспективный анализ:
/(?<=\S)[\t ]+$/
, но, к сожалению, он не поддерживается в более старых версиях ruby, поэтому вы ' Вам нужно будет обработать захваченный символ:
str.gsub(/(\S)[\t ]+$/) { $1 }
Ваше первое выражение близко, и вам просто нужно изменить \ b на отрицательный класс символов. Это должно работать лучше:
/([^\t ])[\t ]+$
Проще говоря, это соответствует всем табуляциям и пробелам в строках, следующих за символом, который не является табуляцией или пробелом.
edit: о, вы имели в виду непустые строки. Тогда вам понадобится что-то вроде / ([^ \ s]) \ s + / и вложить их в первую часть
Я не совсем уверен, что вы просите, но не сработает ли что-то подобное, если вы просто хотите захватить конечные пробелы?
([\s]+)$
или если вы хотите захватить только табуляции
([ \t]+)$
Так как регулярные выражения жадные, они захватят столько, сколько смогут. Вам действительно не нужно сообщать им контекст заранее, если вы знаете, что хотите запечатлеть.
Я до сих пор не понимаю, что вы подразумеваете под конечными заполнителями отступов, поэтому извините, если я неправильно понял.
Разве это не поможет?
/([^\t ])([\t ]+)$/
Однако вам нужно что-то сделать с совпавшим последним непробельным символом.