Варианты использования для регулярного выражения найти / заменить - PullRequest
7 голосов
/ 09 сентября 2008

Я недавно обсуждал редакторов с коллегой. Он использует один из менее популярных редакторов, а я - другой (я не буду говорить, какие из них, потому что это не актуально, и я хочу избежать войны пламени редактора). Я говорил, что мне не очень нравится его редактор, потому что он не позволяет вам находить / заменять регулярными выражениями.

Он сказал, что никогда не хотел этого делать, что было удивительно, потому что я постоянно этим занимаюсь. Тем не менее, изо всех сил я не смог придумать более одного или двух примеров. Может ли кто-нибудь здесь привести несколько примеров, когда они находят регулярное выражение находить / заменять полезным в своем редакторе? Вот что я смог придумать с тех пор в качестве примеров того, что мне действительно пришлось сделать:

  1. Удалить начало строки каждой строки в файле, который выглядит следующим образом:
    Line 25634 :
    Line 632157 :

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

  3. Передача результата оператора выбора MySQL в текстовый файл, затем удаление всего мусора форматирования и переформатирование его в словарь Python для использования в простом скрипте.

  4. В CSV-файле без экранированных запятых замените первый символ 8-го столбца каждой строки на заглавную A.

  5. Учитывая кучу трассировок стека GDB со строками типа
    #3 0x080a6d61 in _mvl_set_req_done (req=0x82624a4, result=27158) at ../../mvl/src/mvl_serv.c:850
    вырезать все из каждой строки, кроме имен функций.

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

Ответы [ 10 ]

2 голосов
/ 09 сентября 2008

Regex позволяет легко заменить целые слова, используя границы слов.

(\b\w+\b)

Таким образом, вы можете заменить ненужные слова в вашем файле, не мешая таким словам, как Сканторп

2 голосов
/ 14 ноября 2008

Вчера я взял оператор создания таблицы, который я сделал для таблицы Oracle, и преобразовал поля в вызовы метода setString (), используя JDBC и PreparedStatements. Имена полей таблицы были сопоставлены с моими свойствами класса, поэтому поиск и замена регулярных выражений идеально подходили.

Создать текст таблицы:

...
field_1 VARCHAR2(100) NULL,
field_2 VARCHAR2(10) NULL,
field_3 NUMBER(8) NULL,
field_4 VARCHAR2(100) NULL,
....

My Regex Search:

/([a-z_])+ .*?,?/

Моя замена:

pstmt.setString(1, \1);

Результат:

...
pstmt.setString(1, field_1);
pstmt.setString(1, field_2);
pstmt.setString(1, field_3);
pstmt.setString(1, field_4);
....

Затем я прошел и вручную установил позицию int для каждого вызова и изменил метод на setInt () (и другие), где это необходимо, но для меня это сработало. Я фактически использовал его три или четыре раза для аналогичных преобразований в вызовы полей.

2 голосов
/ 09 сентября 2008

Буквально на прошлой неделе я использовал regex find / replace для преобразования файла CSV в файл XML.

Достаточно просто, чтобы сделать это на самом деле, просто нарежьте каждое поле (к счастью, у него не было экранированных запятых) и вытолкните его обратно с соответствующими тегами вместо запятых.

1 голос
/ 03 сентября 2009

Я только что вставил длинную последовательность символов в строковый литерал, и теперь я хочу разбить ее на конкатенацию более коротких строковых литералов, чтобы она не переносилась. Я также хочу, чтобы он был читабельным, поэтому я хочу разбивать только после пробелов. Я выбираю всю строку (без кавычек) и выполняю замену всего элемента в выделении этим регулярным выражением:

/.{20,60} /

... и эта замена:

/$0"¶         + "/

... где Пикроу - это фактическая новая строка, а количество пробелов варьируется от одного инцидента к другому. Результат:

String s = "I recently discussed editors with a co-worker. He uses one "
         + "of the less popular editors and I use another (I won't say "
         + "which ones since it's not relevant and I want to avoid an "
         + "editor flame war). I was saying that I didn't like his "
         + "editor as much because it doesn't let you do find/replace "
         + "with regular expressions.";
1 голос
/ 14 ноября 2008

Одна вещь, для которой я все время использую ее в веб-разработке, - это отрывать текст HTML-тегов. Это может потребоваться для очистки входных данных пользователя в целях безопасности или для предварительного просмотра новостной статьи. Например, если у вас есть статья с большим количеством HTML-тегов для форматирования, вы не можете просто сделать ВЛЕВО (article_text, 100) + '...' (плюс ссылку «читать дальше») и отобразить ее на странице риск разбить страницу, разделив HTML-тег.

Кроме того, мне пришлось удалить теги img в записях базы данных, которые ссылаются на изображения, которых больше не существует. И давайте не будем забывать проверку веб-формы. Если вы хотите, чтобы пользователь ввел правильный адрес электронной почты (синтаксически говоря) в веб-форму, это единственный способ тщательно его проверить.

1 голос
/ 09 сентября 2008

Я использую его все время, когда кто-то посылает мне список номеров посещений пациентов в столбце (скажем, 100-200), и они мне нужны в формате «0000000444», «000000004445». творит чудеса для меня!

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

Я даже написал небольшую диалоговую прогу, чтобы применить регулярные выражения к моему буферу обмена. Он захватывает содержимое, применяет регулярное выражение и затем загружает его обратно в буфер обмена.

1 голос
/ 09 сентября 2008

Мне нравится использовать регулярные выражения для переформатирования списков элементов, подобных этому:

int item1
double item2

до

public void item1(int item1){
}
public void item2(double item2){
}

Это может сильно сэкономить время.

0 голосов
/ 18 сентября 2008

Я согласен с вами по баллам 3 , 4 и 5 , но не обязательно по баллам 1 и 2 .

В некоторых случаях 1 и 2 легче достичь с помощью макроса анонимной клавиатуры.

Под этим я имею в виду следующее:

  1. Поместить курсор на первую строку
  2. Начало записи макроса клавиатуры
  3. Изменить первую строку
  4. Поместить курсор на следующую строку
  5. Остановить запись.

Теперь все, что нужно для изменения следующей строки, - это повторить макрос.

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

0 голосов
/ 12 сентября 2008

Регулярное выражение очень удобно в любое время, когда я пытаюсь заменить значение, которое занимает несколько строк. Или когда я хочу заменить значение чем-то, что содержит разрыв строки.

Мне также нравится, что вы можете сопоставлять вещи в регулярном выражении и не заменять полное совпадение, используя синтаксис $ # для вывода части совпадения, которую вы хотите сохранить.

0 голосов
/ 09 сентября 2008

Первое, что я делаю с любым редактором, это пытаюсь выяснить его странности в Regex. Я пользуюсь этим все время. Ничего особо сумасшедшего, но это удобно, когда вам нужно копировать / вставлять вещи между различными типами текста - SQL <-> PHP - это тот, который я делаю чаще всего, - и вы не хотите пускаться в ход, делая одно и то же изменение. 500 раз.

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