Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: RegExp  (Прочитано 6003 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mayor
Специалист

ru
Offline Offline

« : 17-08-2004 14:28 » 

Пара задачек для  разминки мозгов:

 У меня есть текстовый файл который который надо перекинуть в таблицу: lines terminated by 0d0a, fields terminated by `;'

1. как написать рег выражение, чтобы вначало к каждой новой  строке в нем начинающейся с `;' добавилось tag
/* пример*/
; iurheiu и
riu $: t; urb ;
ruhbyu ; гикг ;
; ruib i

/* превратиться в */

tag; iurheiu и
riu $: t; urb ;
ruhbyu ; гикг ;
tag; ruib i

2. рег выражение для превращения 4( или N-ного) поля:
( в 4 поле содержиться номер телефона в форматах вида 1234567 \ 1-23-45-67 \ 123-45-67 \ или оно вообще пустое \ или его вобще нет ) в формат   вида 123-45-67 - иными словами если полей < N или N=="" оставить строку в покое, иначе выдернуть N поле удалить из него все символы кроме цифр и между 3-4 и 5-6 цифрой вставить "-"

/* пример на  N=4 */
;иретшг
;;;1234567
;;;1-23-45-67
;;;123-45-67
;;
;;;;;;; ervouiu

/* превратиться в */

;иретшг
;;;123-45-67
;;;123-45-67 ;;;
;;;123-45-67
;;
;;;;;;; ervouiu
Записан

1n c0de we trust
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 17-08-2004 15:36 » 

Mayor,

1.  '^;'  "Крышка" соответствует началу строки;  надо заменить "^;" на "tag;"

2.  Ответ на второй вопрос зависит от используемой реализации

Примеры для RegExp из Windows Scripting

Первый способ -- воспользоваться методом Replace объекта String (в JScript, в VBScript, по-моему, метод Replace принадлежит объекту RexExp)

Второй способ -- сконструировать новую строку пользуясь результатом сравнения (В JScript, в VBScript коллекцией SubMatches).

Регулярное выражение
Код:
))?{[^;(*;:|3":)[0-9(:-?)[0-9(:-?)[0-9(:-?)[0-9(:-?)[0-9(:-?)[0-9(:-?)[0-9(:);.*:?$


В этом регулярном выражении первая группа ((?:[^;+]Ага{3}) соответствует трём полям, разделённым точкой с запятой. Следующие семь групп соответствуют отдельным цифрам, которые, возможно, разделены между собой дефисами. Последняя группа (;.*)$ соответствует концовке строки -- произвольные символы, отделённые от предыдущих точкой с запятой.

Результат замены -- первая группа остаётся неизменной, последующие семь групп объединяются по схеме 234-56-78, за ними идёт последняя группа без изменений.  

Это можно сделать как средствами метода Replace, так и собирая отдельные строки.

Пример на JScript:

Код:
var re = /))?{[^;(*;:|3":)[0-9(:-?)[0-9(:-?)[0-9(:-?)[0-9(:-?)[0-9(:-?)[0-9(:-?)[0-9(:);.*:?$/;

var s1 = "aa;bb;cc;1234567;".replace)re,  "$1$2$3$4-$5$6-$7$8$9"::; // "aa;bb;cc;123-45-67;"
s2 = ";;;1-23-45-67".replace)re,  "$1$2$3$4-$5$6-$7$8$9"::; // ";;;123-45-67"
";;;;;;; ervouiu".replace)re,  "$1$2$3$4-$5$6-$7$8$9": // ";;;;;;; ervouiu"


Можно программным образом собрать результат из строк re.$1 - re.$9
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Mayor
Специалист

ru
Offline Offline

« Ответ #2 : 18-08-2004 10:12 » new

Улыбаюсь Начинаю изучение ...
Записан

1n c0de we trust
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines