2017-02-11 16 views
0

Простите, возможно, вопрос, поскольку я довольно новичок в формулировании своего собственного регулярного выражения, и все, что я придумал, я сделал это в прошлый час.Регулярное выражение ST3, чтобы найти числовые последовательности, не окруженные другими символами

У меня есть огромный текстовый файл, который я работаю в Sublime Text 3. Я пытаюсь использовать регулярные выражения в поисках ST и заменить функцию, чтобы определить все 2-4 последовательности цифр, которые не окружали другими персонажами.

Это позволит определить следующие последовательности:

01 
330 
0302 

И игнорировать следующее:

1 
10405 
3042-2 
(3030 
x5590 

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

Иными словами, , если на его собственной линии существует последовательность из 2-4 цифр, ее необходимо идентифицировать. Если нет, или если это < 2 или> 5 цифр, его нужно оставить в покое.

Лучшее, что я смог придумать до сих пор это:

\b\n[0-9]{2,4}\n\b

... который работает для идентификации этих последовательностей достаточно хорошо, но на самом деле не кажется, чтобы я мог заменить указанную область: щелчок Заменить или нажать ярлык Ctrl + Shift + H только кажется, чтобы выделить последовательности, а затем двигаться дальше. Если это проблема с регулярным выражением, которое я использую, что еще я могу использовать?

ответ

1

Я не слишком ясно, что вы просите, но если вы хотите, чтобы соответствовать 2-4 цифры на строке, это должно сделать

^[0-9]{2,4}$ 

В^матчи начинаются линии, $ спички конец

Если вы хотите, чтобы обеспечить начальные или конечные пробелы, вы можете сделать это

^[ ]*[0-9]{2,4}[ ]*$ 

Что вы хотите, чтобы заменить текст? Если сказать, что вы хотите удалить совпадающий текст и всю строку, вы можете сделать это

^[0-9]{2,4}$\n 

Это соответствует всей линии, включая символ новой строки.

В качестве альтернативы, вы можете захватить совпавший текст скобки

^([0-9]{2,4})$ 

и сделать замену, как это

foo$1bar 

в $ 1 является то, что находится в (...).Это даст вам

foo01bar 
foo330bar 
foo0302bar 

And ignore the following: 

1 
10405 
3042-2 
(3030 
x5590 
+0

Возможно, вы, возможно, неправильно поняли то, что я просил, с моими примерами, но неважно; этот ответ совершенен. Первое регулярное выражение отвечает именно на то, о чем я просил, а второй с '\ n' идет дальше и сохраняет дополнительный шаг по удалению пустых строк, которые первое решение - и мое - оставляют позади. Спасибо. – Hashim