2016-08-11 4 views
2

Как использовать функцию замены регулярного выражения SSMS 2016 для удаления лишних пробелов и вкладок в конце строк?Использование регулярного выражения заменить в SSMS 2016 на линии обрезки

Пример содержимого редактор:

select 
    'tab' 
, 'space' 

select 
    'tabs'  
, 'spaces' 

Цель:

select 
    'tab' 
, 'space' 

select 
    'tabs' 
, 'spaces' 

В SSMS 2012 Строки поиска :b*$ соответствует этим дополнительным вкладкам и пространство и позволяет мне заменить их ничем. SSMS 2016 начал использовать какой-то синтаксис regex .net для функции find/replace. Использование \s+$ почти работает в 2016 году, но оно удаляет пустые строки.

+0

Попробуйте использовать '[\ p {Zs} \ t] + $' –

+0

'[\ p {Zs} \ t] + $' соответствует двум пробелам в последней строке, ничего больше. – jumxozizi

+0

Это означает, что вам нужно включить многострочный режим с помощью '(? M)'. '(? m) [\ p {Zs} \ t] + $' –

ответ

2

Для удаления задней горизонтального пробелы из конца линий с .NET регулярное выражение, необходимо использовать

(?m)[\p{Zs}\t]+$ 

многопоточный модификатор (?m) необходимо сделать конец матча с $ якорь строки, а не целые строки. \p{Zs} соответствует любому Unicode горизонтальным пробелам, но табу, поэтому нам нужно добавить \t и \p{Zs} в класс символов [...]. Коэффициент + будет соответствовать одному или нескольким вхождениям этих пробелов.

Альтернатива, которая не зависит от многострочного модификатора:

[^\S\r\n]+(\r?\n|$) 

и заменить $1 обратной ссылки (которые повторно вставляет текст захватили на первый (и единственный) захватив группу в шаблон, т. е. сохранение конца строки на выходе).

Детали:

  • [^\S\r\n]+ - соответствует 1 или более других, чем не пробельные, CRS и ЛФ символы (в основном, в \s за исключением \r и \n)
  • (\r?\n|$) - соответствует либо в конце строки (опционально CR и обязательный LF) или в конце строки ($).
+0

'(? m) [\ p {Zs} \ t] + $' также соответствует только пробелам в последних строках. Синтаксис регулярного выражения SSMS 2016 может быть каким-то ограниченным. – jumxozizi

+0

Попробуйте заменить группу захвата, которая должна работать даже в JavaScript. '[^ \ S \ r \ n] + (\ r? \ N?)' -> '$ 1' –

+0

Альтернатива удаляет все пробелы и вкладки. Ведущие пробелы должны быть оставлены такими, какими они есть. – jumxozizi

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