regex для соответствия запаздыванию пробела, но не строк, которые являются полностью пробелом (заполнители отступа)

Я пытался создать рубин 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 ;  

С другой стороны, существует ли более простое / более изящный способ сделать это?

7
задан Gumbo 19 April 2010 в 15:48
поделиться

5 ответов

Если вы используете 1.9, вы можете использовать ретроспективный анализ:

/(?<=\S)[\t ]+$/

, но, к сожалению, он не поддерживается в более старых версиях ruby, поэтому вы ' Вам нужно будет обработать захваченный символ:

str.gsub(/(\S)[\t ]+$/) { $1 }
12
ответ дан 6 December 2019 в 19:34
поделиться

Ваше первое выражение близко, и вам просто нужно изменить \ b на отрицательный класс символов. Это должно работать лучше:

/([^\t ])[\t ]+$

Проще говоря, это соответствует всем табуляциям и пробелам в строках, следующих за символом, который не является табуляцией или пробелом.

1
ответ дан 6 December 2019 в 19:34
поделиться

edit: о, вы имели в виду непустые строки. Тогда вам понадобится что-то вроде / ([^ \ s]) \ s + / и вложить их в первую часть

Я не совсем уверен, что вы просите, но не сработает ли что-то подобное, если вы просто хотите захватить конечные пробелы?

([\s]+)$

или если вы хотите захватить только табуляции

([ \t]+)$

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

Я до сих пор не понимаю, что вы подразумеваете под конечными заполнителями отступов, поэтому извините, если я неправильно понял.

0
ответ дан 6 December 2019 в 19:34
поделиться

возможно это ...

[\ t | \ s] +? $

или [] + $

0
ответ дан 6 December 2019 в 19:34
поделиться

Разве это не поможет?

/([^\t ])([\t ]+)$/

Однако вам нужно что-то сделать с совпавшим последним непробельным символом.

0
ответ дан 6 December 2019 в 19:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: