|
РегЭкспы: как указать в паттерне исключение символа из результата | ☑ | ||
---|---|---|---|---|
0
Zhuravlik
15.03.16
✎
11:19
|
Добрый день. Сегодня открыл для себя notepad и регЭкспы)) На самом деле открыл давно, но захотел большего. Мучаю текст запроса - хочу в нем все вхождения &П заменить на &НачДата. Дело в том что там есть еще и параметры типа &Пользователь, &ПорядокПрименения-чего-то-там и т. д.
Вот такой паттерн возвращает мне все вхождения "&П," - (&П[^А-я]{1}). А как мне получить именно все вхождения "&П"? Ясно, что могу и так обойтись - заменить "&П," на "&НачДата," и в коде поубирать лишнее - если будет (оно же найдет и "&П)" и пр. ). Вопрос уже чисто ради интереса - как сделать. Читал вики и т. д. - не пойму, не вижу. |
|||
1
Zhuravlik
15.03.16
✎
11:51
|
ап, кто-нибудь да знает
|
|||
2
Кирпич
15.03.16
✎
11:56
|
щас в гугле поищу
|
|||
3
Serginio1
15.03.16
✎
11:59
|
||||
4
Zhuravlik
15.03.16
✎
12:12
|
Блин, да читал я это, неужели сложно пальцем ткнуть?
|
|||
5
Serginio1
15.03.16
✎
12:13
|
(4) Так выдели группы и заменяй
|
|||
6
Fragster
гуру
15.03.16
✎
12:13
|
.replace
|
|||
7
Кирпич
15.03.16
✎
12:14
|
(4) так мы сами не знаем. щас разберемся.
|
|||
8
Fragster
гуру
15.03.16
✎
12:17
|
||||
9
mooo
15.03.16
✎
12:19
|
(0)
Ctrl - H Искать &П Заменить &НачДата Галка Искать слово целиком |
|||
10
Fragster
гуру
15.03.16
✎
12:21
|
(9) да не , просто автор не очень умеет работать с СКД
|
|||
11
Fragster
гуру
15.03.16
✎
12:21
|
или, там, построителем
|
|||
12
Zhuravlik
15.03.16
✎
12:22
|
(5) У меня в результате поиска символ в конце, а мне замену нужно произвести предварительно от него избавившись
(8) Поищи в строке &П, (10) Поспешные выводы такие поспешные... |
|||
13
ЕщеОдин Программист
15.03.16
✎
12:22
|
была такая вещь: предпроверка не равно. Синтаксис по памяти не помню.
|
|||
14
Fragster
гуру
15.03.16
✎
12:24
|
вот так лучше: &П((\s)|^)
|
|||
15
Fragster
гуру
15.03.16
✎
12:24
|
(12) т.е. автор умеет работать с СКД или построителем? И это у него просто спортивный интерес?
|
|||
16
Кирпич
15.03.16
✎
12:25
|
ну у меня так ищет нормально
"&П[^А-я]" |
|||
17
Zhuravlik
15.03.16
✎
12:27
|
(14) нет
(15) типа того, прочитай (0). (16) Такой паттерн вернет "&П," - с ЗАПЯТОЙ В КОНЦЕ))) Вопрос в том как исключить последние символы из найденного? |
|||
18
Fragster
гуру
15.03.16
✎
12:28
|
||||
19
Zhuravlik
15.03.16
✎
12:29
|
Я думал тут найдется кто-то уже попадавший на такое - вижу что вы по моим же шишкам идете
|
|||
20
Fragster
гуру
15.03.16
✎
12:29
|
(17) не надо искать, в (0) - заменить.
вот, в (18) неплохое решение для конкретного случая |
|||
21
Fragster
гуру
15.03.16
✎
12:30
|
||||
22
Zhuravlik
15.03.16
✎
12:31
|
(21) Добавь в проверочную строку параметр "&Пользователь"
(20) Да интерес чисто спортивный) С запросом я уже разобрался. |
|||
23
ЕщеОдин Программист
15.03.16
✎
12:32
|
(17) предпроверка не равно не включает проверенные символы
|
|||
24
Zhuravlik
15.03.16
✎
12:34
|
(8) Я тестился здесь http://www.regexr.com/ - поудобней
В общем, если получится отпишусь. Спасибо всем за участие. |
|||
25
Кирпич
15.03.16
✎
12:35
|
ну тогда так
"&П(?![А-я])" |
|||
26
Fragster
гуру
15.03.16
✎
12:36
|
(22) хм. походу реализация регэкспа от майкрософт считает русские буквы на символами слова. Тогда надо \W заменить на [^атутдиапазоныразрешенныхсимволов], например [^a-zА-Я0-9_]
ну и конец строки у меня неправильный :) https://i.imgur.com/juYdXK2.png |
|||
27
Zhuravlik
15.03.16
✎
12:36
|
(25) эм, надо подумать, спасибо)
|
|||
28
Кирпич
15.03.16
✎
12:37
|
(27) чо там думать. оно работает.
|
|||
29
Zhuravlik
15.03.16
✎
12:38
|
(28) Я наверное очень странно себя поведу, если попробую разобраться "как"))
|
|||
30
Fragster
гуру
15.03.16
✎
12:38
|
(28) не, не работает https://i.imgur.com/aEXnwNo.png
|
|||
31
Кирпич
15.03.16
✎
12:39
|
(29) это просмотр вперед. здесь нашел
https://ru.wikipedia.org/wiki/Регулярные_выражения |
|||
32
dimalf
15.03.16
✎
12:41
|
Добрый день!
Если у Вас в тексте после &П пробел, то в окне поиска/замены поставьте галочку "Слова целиком" |
|||
33
Fragster
гуру
15.03.16
✎
12:41
|
(31) да, так неплохо получается, если подкорректировать выражение и замену https://i.imgur.com/v8nDsmF.png
|
|||
34
Кирпич
15.03.16
✎
12:42
|
(33) ну принцип главное ясен, а это уже детали.
|
|||
35
mooo
15.03.16
✎
12:48
|
(?:\W|^)(&П)(?:\W|$)
|
|||
36
Лефмихалыч
15.03.16
✎
12:50
|
а зачем регэкспы, чтобы заменить конкретно вот эту последовательность символов "&П"? Регэкспы нужны, когда последовательность не конкретная и там могут бытьвсякие разницы по дороге.
|
|||
37
Fragster
гуру
15.03.16
✎
12:50
|
(36) см. скриншот из (33). чтобы не заменить лишнего.
|
|||
38
Fragster
гуру
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) человек не решает конкретную задачу, а регэкспы изучает на данном примере. при чем лисапед.
|
|||
41
Zhuravlik
15.03.16
✎
13:26
|
(39) Во блин)) Истина всегда где-то рядом.
(40) Да не, все правильно - начал то я как-раз с того что запрос стал регэкспами ковырять) Сколько раз этой заменой пользовался, тут протупил. Просто анализировать большие тексты запросов (на вхождение подстрок) - удобнее в блокноте/с регэкспами - чтобы подсветка была, даже забыл как-то про конфигуратор. Уже понятно что в регулярках так просто не сделать. А раз просто нельзя, то сложно не надо. Всем спасибо за участие. |
|||
42
Лефмихалыч
15.03.16
✎
13:27
|
(41) галка "целиком" заменит "&П_" на "&ДатаНач_", так что будь на стрёме и не расслабляйся
|
|||
43
mooo
15.03.16
✎
13:31
|
(41) см (9) )))
регекспом еще вариант (?=[^A-Za-z0-9_А-я]|^)(&П)(?=[^A-Za-z0-9_А-я]|$) |
|||
44
Zhuravlik
15.03.16
✎
13:38
|
(43) Тогда мой разум еще был во власти регэкспа. Ну, че тут скажешь....
(?=[^A-Za-z0-9_А-я]|^)(&П)(?=[^A-Za-z0-9_А-я]|$) - не, это не вариант)) |
|||
45
Serginio1
15.03.16
✎
15:51
|
А вот так работает
input = "&П в начале строки |в середине &П строки |в конце строки &П |&Пользователь | серед &Пользователь"; pattern = "\b(&П)\b"; Regex = Врап.ПолучитьТип("System.Text.RegularExpressions.Regex"); // Получаем совпадения в экземпляре класса Match replacement1 = "&НачДата"; input = Regex.Replace(input, pattern, replacement1); Сообщить(input); |
|||
46
Serginio1
15.03.16
✎
15:53
|
45 Прошу прощения не то
|
|||
47
Serginio1
15.03.16
✎
16:43
|
Такой патерн проходит
pattern = "&П\b" Не пойму ка добавить в начале границу слова \b Соответствует границе слова, т.е. соответствует позиции между символом \w и символом \W или между символом \w и началом или концом строки. |
|||
48
Кирпич
15.03.16
✎
16:52
|
(47) Точно!
|
|||
49
Serginio1
15.03.16
✎
16:57
|
pattern = "\^|\s(&П)\b";
Вот такой работает |
|||
50
Кирпич
15.03.16
✎
17:03
|
(49) да и "&П\b" работает нормально
|
|||
51
Fragster
гуру
15.03.16
✎
17:16
|
||||
52
Timon1405
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 в данном случае? |
|||
53
Fram
15.03.16
✎
17:19
|
&П\w*
|
|||
54
kofeinik
15.03.16
✎
17:20
|
А почему нельзя просто поставить пробел после &П?
|
|||
55
Fram
15.03.16
✎
17:21
|
(53)+ гоню )
|
|||
56
Serginio1
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(Стр,СтрокаЗамены); Сообщить(стр); |
|||
57
Timon1405
15.03.16
✎
17:27
|
(54) например, запрос заканчивается словами
ГДЕ Регистр.Период>&П <--тут нет пробела, а стоит конецстроки |
|||
58
Serginio1
15.03.16
✎
17:27
|
(54) Может быть в конце строки
|
|||
59
Fram
15.03.16
✎
17:30
|
&П(?=[^0-9_А-я])
|
|||
60
Zhuravlik
15.03.16
✎
17:32
|
(56) Зачем вы так мучаетесь? Воспользуйтесь http://regexr.com/ - отличный сервис.
На котором я проверял в т.ч. "\b" - с ним не прокатило. Заразил я народ. Вот она, идея-вирус) |
|||
61
Timon1405
15.03.16
✎
17:33
|
(59) у вас не сработает пример из (57)
|
|||
62
Fram
15.03.16
✎
17:34
|
(61) Попробуй
|
|||
63
kofeinik
15.03.16
✎
17:34
|
(57) Ну так в два прохода, вначале поменять "&П ", потом &П$
|
|||
64
Serginio1
15.03.16
✎
17:36
|
(60) А у меня прокатывает.
&НачДата в начале . строки в середине &НачДата строки в конце КП . строки &НачДата &Пользователь серед &Пользователь |
|||
65
Fram
15.03.16
✎
17:39
|
вот вариант с концом текста
&П(?=[^0-9_А-я])|&П$ |
|||
66
Fram
15.03.16
✎
17:42
|
||||
67
Fram
15.03.16
✎
17:43
|
приз какой победителю? :)
|
|||
68
Timon1405
15.03.16
✎
17:44
|
(67) &Победителю &Приз &Пирожок)
|
|||
69
Fram
15.03.16
✎
17:48
|
я тут недавно логи циски регуляркой парсил. вот это было развлечение ))
во первых хочется выразить благодарность разработчикам этих логов. а АДу им отдельный котел точно должен быть выделен |
|||
72
Fragster
гуру
21.03.16
✎
13:13
|
расширил функциональность: теперь в окне выводится сразу и поиск и замена, + в поиске подсвечиваются найденные фрагменты и выводится всплывающая подсказка с деталями:
![]() |
|||
73
Timon1405
21.03.16
✎
13:26
|
(72) круто кончено, но вы же в курсе что есть https://www.regexbuddy.com/?
там есть, например, библиотека шаблонов, отладка, разворачивание регэкспа в дерево. |
|||
74
Fragster
гуру
21.03.16
✎
14:26
|
(73) я в курсе, что есть. делал для 1с и встраивания в доп. обработки БСП, чтобы никуда не ходить :)
|
|||
75
Fragster
гуру
21.03.16
✎
14:26
|
к тому же диалекты немного отличаются, что заработает в regexp buddy не всегда заработает в vbscript.regex
|
|||
76
Fragster
гуру
21.03.16
✎
14:27
|
ну и 40 баксов - как-то крутовато, нет?
|
|||
77
Serginio1
21.03.16
✎
14:41
|
(56) Добавь еще для нетовского RegularExpressions (56)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |