Вход | Регистрация
 

РегЭкспы: как указать в паттерне исключение символа из результата

РегЭкспы: как указать в паттерне исключение символа из результата
Я
   Zhuravlik
 
15.03.16 - 11:19
Добрый день. Сегодня открыл для себя notepad и регЭкспы)) На самом деле открыл давно, но захотел большего. Мучаю текст запроса - хочу в нем все вхождения &П заменить на &НачДата. Дело в том что там есть еще и параметры типа &Пользователь, &ПорядокПрименения-чего-то-там и т. д.
Вот такой паттерн возвращает мне все вхождения "&П," - (&П[^А-я]{1}). А как мне получить именно все вхождения "&П"?
Ясно, что могу и так обойтись - заменить "&П," на "&НачДата," и в коде поубирать лишнее - если будет (оно же найдет и "&П)" и пр. ). Вопрос уже чисто ради интереса - как сделать. Читал вики и т. д. - не пойму, не вижу.
   Zhuravlik
 
1 - 15.03.16 - 11:51
ап, кто-нибудь да знает
   Кирпич
 
2 - 15.03.16 - 11:56
щас в гугле поищу
   Serginio1
 
3 - 15.03.16 - 11:59
   Zhuravlik
 
4 - 15.03.16 - 12:12
Блин, да читал я это, неужели сложно пальцем ткнуть?
   Serginio1
 
5 - 15.03.16 - 12:13
(4) Так выдели группы и заменяй
   Fragster
 
6 - 15.03.16 - 12:13
.replace
   Кирпич
 
7 - 15.03.16 - 12:14
(4) так мы сами не знаем. щас разберемся.
   Fragster
 
8 - 15.03.16 - 12:17
https://i.imgur.com/6PRvwAL.png
результат получен с помощью http://catalog.mista.ru/public/75941/
   mooo
 
9 - 15.03.16 - 12:19
(0)
Ctrl - H
Искать &П
Заменить &НачДата
Галка Искать слово целиком
   Fragster
 
10 - 15.03.16 - 12:21
(9) да не , просто автор не очень умеет работать с СКД
   Fragster
 
11 - 15.03.16 - 12:21
или, там, построителем
   Zhuravlik
 
12 - 15.03.16 - 12:22
(5) У меня в результате поиска символ в конце, а мне замену нужно произвести предварительно от него избавившись
(8) Поищи в строке &П,
(10) Поспешные выводы такие поспешные...
   ЕщеОдинПрограммист
 
13 - 15.03.16 - 12:22
была такая вещь: предпроверка не равно. Синтаксис по памяти не помню.
   Fragster
 
14 - 15.03.16 - 12:24
вот так лучше: &П((\s)|^)
   Fragster
 
15 - 15.03.16 - 12:24
(12) т.е. автор умеет работать с СКД или построителем? И это у него просто спортивный интерес?
   Кирпич
 
16 - 15.03.16 - 12:25
ну у меня так ищет нормально

"&П[^А-я]"
   Zhuravlik
 
17 - 15.03.16 - 12:27
(14) нет
(15) типа того, прочитай (0).
(16) Такой паттерн вернет "&П," - с ЗАПЯТОЙ В КОНЦЕ))) Вопрос в том как исключить последние символы из найденного?
   Fragster
 
18 - 15.03.16 - 12:28
   Zhuravlik
 
19 - 15.03.16 - 12:29
Я думал тут найдется кто-то уже попадавший на такое - вижу что вы по моим же шишкам идете
   Fragster
 
20 - 15.03.16 - 12:29
(17) не надо искать, в (0) - заменить.
вот, в (18) неплохое решение для конкретного случая
   Fragster
 
21 - 15.03.16 - 12:30
и с запятой в (18) ок также
https://i.imgur.com/qMaxVg4.png
   Zhuravlik
 
22 - 15.03.16 - 12:31
(21) Добавь в проверочную строку параметр "&Пользователь"
(20) Да интерес чисто спортивный) С запросом я уже разобрался.
   ЕщеОдинПрограммист
 
23 - 15.03.16 - 12:32
(17) предпроверка не равно не включает проверенные символы
   Zhuravlik
 
24 - 15.03.16 - 12:34
(8) Я тестился здесь http://www.regexr.com/ - поудобней
В общем, если получится отпишусь. Спасибо всем за участие.
   Кирпич
 
25 - 15.03.16 - 12:35
ну тогда так
"&П(?![А-я])"
   Fragster
 
26 - 15.03.16 - 12:36
(22) хм. походу реализация регэкспа от майкрософт считает русские буквы на символами слова. Тогда надо \W заменить на [^атутдиапазоныразрешенныхсимволов], например [^a-zА-Я0-9_]
ну и конец строки у меня неправильный :)
https://i.imgur.com/juYdXK2.png
   Zhuravlik
 
27 - 15.03.16 - 12:36
(25) эм, надо подумать, спасибо)
   Кирпич
 
28 - 15.03.16 - 12:37
(27) чо там думать. оно работает.
   Zhuravlik
 
29 - 15.03.16 - 12:38
(28) Я наверное очень странно себя поведу, если попробую разобраться "как"))
   Fragster
 
30 - 15.03.16 - 12:38
(28) не, не работает https://i.imgur.com/aEXnwNo.png
 
 
   Кирпич
 
31 - 15.03.16 - 12:39
(29) это просмотр вперед. здесь нашел
https://ru.wikipedia.org/wiki/Регулярные_выражения
   dimalf
 
32 - 15.03.16 - 12:41
Добрый день!
Если у Вас в тексте после &П пробел, то в окне поиска/замены поставьте галочку "Слова целиком"
   Fragster
 
33 - 15.03.16 - 12:41
(31) да, так неплохо получается, если подкорректировать выражение и замену https://i.imgur.com/v8nDsmF.png
   Кирпич
 
34 - 15.03.16 - 12:42
(33) ну принцип главное ясен, а это уже детали.
   mooo
 
35 - 15.03.16 - 12:48
(?:\W|^)(&П)(?:\W|$)
   Лефмихалыч
 
36 - 15.03.16 - 12:50
а зачем регэкспы, чтобы заменить конкретно вот эту последовательность символов "&П"? Регэкспы нужны, когда последовательность не конкретная и там могут бытьвсякие разницы по дороге.
   Fragster
 
37 - 15.03.16 - 12:50
(36) см. скриншот из (33). чтобы не заменить лишнего.
   Fragster
 
38 - 15.03.16 - 12:52
(35) уже было. реализация от майкрософта не считает русские буквы за составляющие слова. ну и да. прежде, чем писать, рекомендую все-таки проверить на http://catalog.mista.ru/public/75941/
вот предварительный тест для проверки:
Проверка &П
Проверка &П &П1
Проверка &П=&П1
Проверка &П_
Проверка (&П) 
Проверка &П,
Проверка &Пользователь
   Лефмихалыч
 
39 - 15.03.16 - 13:15
(38) это без регэкспов делается средствами конфигуратора - ctrl+H, подстрока поиска "&П", и обязательно включить галку про "целиком".

Веселопедисты чоротовы :)
   Кирпич
 
40 - 15.03.16 - 13:17
(39) человек не решает конкретную задачу, а регэкспы изучает на данном примере. при чем лисапед.
   Zhuravlik
 
41 - 15.03.16 - 13:26
(39) Во блин)) Истина всегда где-то рядом.
(40) Да не, все правильно - начал то я как-раз с того что запрос стал регэкспами ковырять) Сколько раз этой заменой пользовался, тут протупил.
Просто анализировать большие тексты запросов (на вхождение подстрок) - удобнее в блокноте/с регэкспами - чтобы подсветка была, даже забыл как-то про конфигуратор. Уже понятно что в регулярках так просто не сделать. А раз просто нельзя, то сложно не надо. Всем спасибо за участие.
   Лефмихалыч
 
42 - 15.03.16 - 13:27
(41) галка "целиком" заменит "&П_" на "&ДатаНач_", так что будь на стрёме и не расслабляйся
   mooo
 
43 - 15.03.16 - 13:31
(41) см (9) )))
регекспом еще вариант
(?=[^A-Za-z0-9_А-я]|^)(&П)(?=[^A-Za-z0-9_А-я]|$)
   Zhuravlik
 
44 - 15.03.16 - 13:38
(43) Тогда мой разум еще был во власти регэкспа. Ну, че тут скажешь....
(?=[^A-Za-z0-9_А-я]|^)(&П)(?=[^A-Za-z0-9_А-я]|$) - не, это не вариант))
   Serginio1
 
45 - 15.03.16 - 15:51
А вот так работает
    input = "&П в начале строки 
 |в середине &П строки 
 |в конце строки &П
 |&Пользователь
 |  серед &Пользователь";
 
 pattern = "\b(&П)\b";
 Regex = Врап.ПолучитьТип("System.Text.RegularExpressions.Regex");
  // Получаем совпадения в экземпляре класса Match

 replacement1 = "&НачДата";   
        input = Regex.Replace(input, pattern, replacement1);
        Сообщить(input);
   Serginio1
 
46 - 15.03.16 - 15:53
45 Прошу прощения не то
   Serginio1
 
47 - 15.03.16 - 16:43
Такой патерн проходит
 pattern = "&П\b"
Не пойму ка добавить в начале границу слова

\b Соответствует границе слова, т.е. соответствует позиции между символом \w и символом \W или между символом \w и началом или концом строки.
   Кирпич
 
48 - 15.03.16 - 16:52
(47) Точно!
   Serginio1
 
49 - 15.03.16 - 16:57
pattern = "\^|\s(&П)\b";
Вот такой работает
   Кирпич
 
50 - 15.03.16 - 17:03
(49) да и "&П\b" работает нормально
   Fragster
 
51 - 15.03.16 - 17:16
   Timon1405
 
52 - 15.03.16 - 17:19
разве \b работает с русскими буквами? я проверил пример тут http://regexr.com/ и в RegexBuddy, и везде не выдает совпадений. А вот если заменить П на F, то "&F\b" например находит.
в описании написано «\b»
Assert position at a word boundary (position preceded or followed—but not both—by an ASCII letter, digit, or underscore) «\b»
, считается ли П как ASCII в данном случае?
   Fram
 
53 - 15.03.16 - 17:19
&П\w*
   kofeinik
 
54 - 15.03.16 - 17:20
А почему нельзя просто поставить пробел после &П?
   Fram
 
55 - 15.03.16 - 17:21
(53)+ гоню )
   Serginio1
 
56 - 15.03.16 - 17:26
(50) Хотелось, что бы начиналось с "П

Вот так работает
    Стр = "&П в начале . строки 
 |в середине &П строки 
 |в конце КП . строки &П
 |&Пользователь
 |  серед &Пользователь";
 
 pattern = "(^|\s)(&П)\b";
 Regex = Врап.ПолучитьТип("System.Text.RegularExpressions.Regex");
 RegexOptions = Врап.ПолучитьТип("System.Text.RegularExpressions.RegexOptions");
 

 ргекс = Врап.СоздатьОбъект(Regex,pattern,Врап.OR(RegexOptions.Multiline,RegexOptions.IgnoreCase));
 СтрокаЗамены = "$1&НачДата";   

        стр = ргекс.Replace(Стр,СтрокаЗамены);
        Сообщить(стр);
   Timon1405
 
57 - 15.03.16 - 17:27
(54) например, запрос заканчивается словами 
ГДЕ Регистр.Период>&П <--тут нет пробела, а стоит конецстроки
   Serginio1
 
58 - 15.03.16 - 17:27
(54) Может быть в конце строки
   Fram
 
59 - 15.03.16 - 17:30
&П(?=[^0-9_А-я])
   Zhuravlik
 
60 - 15.03.16 - 17:32
(56) Зачем вы так мучаетесь? Воспользуйтесь http://regexr.com/ - отличный сервис.
На котором я проверял в т.ч. "\b" - с ним не прокатило.
Заразил я народ. Вот она, идея-вирус)
 
 
   Timon1405
 
61 - 15.03.16 - 17:33
(59) у вас не сработает пример из (57)
   Fram
 
62 - 15.03.16 - 17:34
(61) Попробуй
   kofeinik
 
63 - 15.03.16 - 17:34
(57) Ну так в два прохода, вначале поменять "&П ", потом &П$
   Serginio1
 
64 - 15.03.16 - 17:36
(60) А у меня прокатывает.
&НачДата в начале . строки 
в середине &НачДата строки 
в конце КП . строки &НачДата
&Пользователь
  серед &Пользователь
   Fram
 
65 - 15.03.16 - 17:39
вот вариант с концом текста 

&П(?=[^0-9_А-я])|&П$
   Fram
 
66 - 15.03.16 - 17:42
   Fram
 
67 - 15.03.16 - 17:43
приз какой победителю? :)
   Timon1405
 
68 - 15.03.16 - 17:44
(67) &Победителю &Приз &Пирожок)
   Fram
 
69 - 15.03.16 - 17:48
я тут недавно логи циски регуляркой парсил. вот это было развлечение ))
во первых хочется выразить благодарность разработчикам этих логов. а АДу им отдельный котел точно должен быть выделен
   Fragster
 
72 - 21.03.16 - 13:13
расширил функциональность: теперь в окне выводится сразу и поиск и замена, + в поиске подсвечиваются найденные фрагменты и выводится всплывающая подсказка с деталями:
   Timon1405
 
73 - 21.03.16 - 13:26
(72) круто кончено, но вы же в курсе что есть https://www.regexbuddy.com/?
там есть, например, библиотека шаблонов, отладка, разворачивание регэкспа в дерево.
   Fragster
 
74 - 21.03.16 - 14:26
(73) я в курсе, что есть. делал для 1с и встраивания в доп. обработки БСП, чтобы никуда не ходить :)
   Fragster
 
75 - 21.03.16 - 14:26
к тому же диалекты немного отличаются, что заработает в regexp buddy не всегда заработает в vbscript.regex
   Fragster
 
76 - 21.03.16 - 14:27
ну и 40 баксов - как-то крутовато, нет?
   Serginio1
 
77 - 21.03.16 - 14:41
(56) Добавь еще для нетовского RegularExpressions (56)


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.