Вход | Регистрация
 
Информационные технологии :: Математика и алгоритмы

регулярные выражения regexp

регулярные выражения regexp
Я
   mikaelangelm
 
24.04.19 - 18:59
Добрый вечер. Помогите пожалуйста описать при помощи регулярных выражений (работаю в notepad++) строку вида

<Свойство Имя="СтавкаНДС" Тип="ПеречислениеСсылка.СтавкиНДС">[вот здесь может быть 1 перенос строки + табуляция (несколько) + пробелы (несколько) или может не быть вообще ничего]<Значение>
 
 
   mikaelangelm
 
1 - 24.04.19 - 19:02
Выражение в квадратных скобках [] пытался заменить следующим образом:
.*
.*\n.*
^.*[вот тут статический текст]$.*[вот тут статический текст]

не помогает (запускаю поиск по вышеуказанным выражениям, знаю что в тексте таких элементов 195, но находится 0)
   Fram
 
2 - 24.04.19 - 19:07
Откуда переносы строки и табуляции в значении ставки ндс? побольше кусок (пример) можно увидеть?
   Garykom
 
3 - 24.04.19 - 19:14
Насколько надо быть боль...альтернативно мыслящим чтобы вместо парсера разбирать XML регулярками?
   Fram
 
4 - 24.04.19 - 19:15
(3) он похоже не сам XML, а значения узлов пытается регулярками разобрать
   Garykom
 
5 - 24.04.19 - 19:17
(4) "вот здесь может быть 1 перенос строки + табуляция (несколько) + пробелы (несколько) или может не быть вообще ничего"

чего он там пытается?
   mikaelangelm
 
6 - 24.04.19 - 19:18
(2)(3) Спасибо что откликнулись. Есть необходимость отыскать (и впоследствии заменить именно в файле) такие элементы текста, у которых за открывающим тегом Свойство с параметром Имя = "СтавкаНДС" следует открывающий тег Значение

<Ссылка Нпп="2">
    <Свойство Имя="{УникальныйИдентификатор}" Тип="Строка">
        <Значение>0e550a6b-f245-11df-ba52-0015f2de568d</Значение>
    </Свойство>
    <Свойство Имя="Код" Тип="Строка">
        <Значение>796 </Значение>
    </Свойство>
</Ссылка>
</Свойство><Свойство Имя="СтавкаНДС" Тип="ПеречислениеСсылка.СтавкиНДС">
    <Значение>НДС20</Значение>
</Свойство>
    <Свойство Имя="Комментарий" Тип="Строка">
        <Пусто/>
    </Свойство>
   Garykom
 
7 - 24.04.19 - 19:19
А RegExp то в этой задачке нафуя?
   Fram
 
8 - 24.04.19 - 19:19
беру свои слова обратно. +1 к (3)
   Garykom
 
9 - 24.04.19 - 19:20
Тебе надо НДС18 поменять на НДС20 ? или наоборот?
   mikaelangelm
 
10 - 24.04.19 - 19:23
(7) работаю с файлом xml в notepad++, решил что иных способов удобнее и быстрее нет
менять значения НДС не нужно, необходимо изменить параметр Имя="СтавкаНДС" на Имя="УдалитьСтавкаНДС", но заменять нужно не все, что содержит "СтавкаНДС", а именно удовлетворяющее условию, указанному выше
 
 Рекламное место пустует
   mikaelangelm
 
11 - 24.04.19 - 19:23
(9) Правильно ли я понимаю, что с помощью notepad++, или любого другого текстового редактора, делать это смысла не имеет
   Garykom
 
12 - 24.04.19 - 19:25
   Fram
 
13 - 24.04.19 - 19:25
(10) под "условию, указанному выше" что имеется ввиду?
   Garykom
 
14 - 24.04.19 - 19:26
(12)+ Pretty Print по идее должно привести XML к стандартному виду убрав все лишнее типа "[вот здесь может быть 1 перенос строки + табуляция (несколько) + пробелы (несколько) или может не быть вообще ничего]"
   mikaelangelm
 
15 - 24.04.19 - 19:28
(12) Прекрасная утилита, пользуюсь. Не нашел как с ее помощью решить мою задачу
(13) Имею ввиду, что хотел бы найти строки, содержащие следующее:
     <Свойство Имя="СтавкаНДС" Тип="ПеречислениеСсылка.СтавкиНДС">[далее указанный в шапке набор символов]<Значение>
(14) Пытался найти строку по шаблонам после использования Pretty print, но к сожалению неудачно
   Fram
 
16 - 24.04.19 - 19:28
(10) 195 вхождений вполне можно обработать и по одному. давно бы уже прошелся
   mikaelangelm
 
17 - 24.04.19 - 19:29
(16) есть 2 файла. Тот, в котором 195 - тестовый. Предстоит также обработать и второй, в котором 1500
   Fram
 
18 - 24.04.19 - 19:29
(15) все равно не понимаю фразу "[далее указанный в шапке набор символов]".. что там может быть кроме ставки НДС?
   Fram
 
19 - 24.04.19 - 19:30
(15) приведи пример того что не должно быть заменено, и того что должно
   Garykom
 
20 - 24.04.19 - 19:30
(18) Реквизит переименован из "СтавкаНДС" в "УдалитьСтавкаНДС" обмен упал ибо правила больше не подходят
   Garykom
 
21 - 24.04.19 - 19:31
И вот вместо правки правил хотят файлы обмена исправить
   mikaelangelm
 
22 - 24.04.19 - 19:32
(20) Все верно, но задачу я попытался максимально упростить исходя из условий что хотелось бы догрузить файлы сегодня, а завтра - заняться исправлением ПКО
(19) Вот как сейчас в 195 местах

<Свойство Имя="СтавкаНДС" Тип="ПеречислениеСсылка.СтавкиНДС">
    <Значение>НДС20</Значение>
</Свойство>

Вот как хотелось бы чтобы было в 195 местах

<Свойство Имя="УдалитьСтавкаНДС" Тип="ПеречислениеСсылка.СтавкиНДС">
    <Значение>НДС20</Значение>
</Свойство>
   Fram
 
23 - 24.04.19 - 19:33
(22) так почему тупая замена всей фразы (строки) не подходит?
   Garykom
 
24 - 24.04.19 - 19:33
(22) Переименуй в конфе реквизиты назад, выполни обмен и вперед править правила
   Garykom
 
25 - 24.04.19 - 19:34
(23) Разные символы внутри "всей строки" могут быть пробелы, табуляции и переносы строк
   Fram
 
26 - 24.04.19 - 19:35
(23) откуда во фразе <Свойство Имя="СтавкаНДС" Тип="ПеречислениеСсылка.СтавкиНДС"> могут взяться разные символы?
   Garykom
 
27 - 24.04.19 - 19:35
<Свойство Имя="СтавкаНДС" Тип="ПеречислениеСсылка.СтавкиНДС"> //тут перенос строки
   <Значение>НДС20</Значение> //тут в начале хз сколько пробелов и табов
   Garykom
 
28 - 24.04.19 - 19:36
(26) Не все строки надо <Свойство Имя="СтавкаНДС" Тип="ПеречислениеСсылка.СтавкиНДС">

Там есть которые не надо переименовывать.

Только если дальше "НДС20"
   Fram
 
29 - 24.04.19 - 19:36
Еще раз.. почему нельзя все вхождения строки
<Свойство Имя="СтавкаНДС" Тип="ПеречислениеСсылка.СтавкиНДС">
заменить на
<Свойство Имя="УдалитьСтавкаНДС" Тип="ПеречислениеСсылка.СтавкиНДС"> ???
   mikaelangelm
 
30 - 24.04.19 - 19:37
(23) Строк несколько, и notepad++ позволяет мне найти значение размером в несколько строк, но значение "заменить на" не позволяет указать шириной в несколько строк
(24) Это было бы последним в списке
(25) Верно, там разные символы, поэтому тоже (23) не подойдет
(26) Разные символы не в указанной вами строке, а именно между ней и тегом <Значение>
   Garykom
 
31 - 24.04.19 - 19:38
(29) Две строки надо искать, точнее подстроку где шаблон1+любые символы (CR таб пробел)+шаблон2

И заменить на шаблон1+любые символы (CR таб пробел)+шаблон3
   Garykom
 
32 - 24.04.19 - 19:39
(29) Лишнее заменит что не надо менять такой простой поиск и замена
   Garykom
 
33 - 24.04.19 - 19:41
Я бы все же (24) точнее завел бы новый реквизит "СтавкаНДС" чтобы были оба с "УдалитьСтавкаНДС"
 
 
   Garykom
 
34 - 24.04.19 - 19:42
Но если конфа базовая то жопа да. Особенно если их много этих базовых разных конф.
   mikaelangelm
 
35 - 24.04.19 - 19:43
(27) Да, и я пытаюсь описать //тут перенос строки посредством regExp, но не выходит (очевидно либо там какой то другой перенос, либо не только перенос). При этом "НДС20</Значение>" даже не нужно искать, достаточно остановиться на открывающем теге <Значение>
(28) На самом деле не в этом принцип. Без разницы какое там значение НДС, главное - что Значение есть. ПОтому что кое где значений нет (например табличная часть документа; там как то по другому называется) и там реквизит ТЧ СтавкаНДС переименовывать никак нельзя
(29) Потому что такие строки необходимо менять только для родительских узлов типа "Номенклатура". Но точно такие же вхождения есть в узлах "Реализация", и там их менять никак нельзя
(31) Верно, но не понимаю как описать корректно Любые символы (CR таб пробел)
пытаюсь но не выходит
(33) Принимается, ПРОФ, но так не хочется..
   Fram
 
36 - 24.04.19 - 19:45
   Fram
 
37 - 24.04.19 - 19:49
устроит?
   Fram
 
38 - 24.04.19 - 19:49
хотя я так и не понял по какому принципу ты определяешь где надо заменять, а где не надо
   Fram
 
39 - 24.04.19 - 19:51
(36) при замене на пробелы и переносе строки можно забить. XML парсеру пофиг на них
   Fram
 
40 - 24.04.19 - 19:53
(38) снимается после прочтения (35) :)
   Garykom
 
41 - 24.04.19 - 19:55
(36) Может зацепить лишнее, надо бы прописать какие могут быть символы внутри
[^]* слишком многое подходит
   Garykom
 
42 - 24.04.19 - 19:57
[\r\n\s\t]*
   Fram
 
43 - 24.04.19 - 19:57
[ \n\r]*
   Garykom
 
44 - 24.04.19 - 19:57
(43) пробел и таб ?
   Fram
 
45 - 24.04.19 - 19:58
(44) пробел - первый символ. а табуляции в выгрузке не может быть
   mikaelangelm
 
46 - 24.04.19 - 20:01
(36) Умом понимаю что должно быть Ок, но мой ноутпад другого мнения ) https://a.radikal.ru/a25/1904/42/09176326fdec.png  Воспользуюсь этим сервисом, спасибо
(40) Рад что смог быть понятым )
(41)(42) Если зацепит лишнее, сразу пойму по количеству. Благодарю

Итого, пробую, в надежде что что то точно подойдет
[^]*
[\r\n\s\t]*
[ \n\r]*
   Fram
 
47 - 24.04.19 - 20:03
(45) хмм.. оказывается может. давно я в этом гов.. не ковырялся ))
   Tonik992
 
48 - 24.04.19 - 20:05
Можно так:

<Свойство Имя="СтавкаНДС" Тип="ПеречислениеСсылка\.СтавкиНДС">.+?<Значение>/gs

добавить обязательный модификатор s, чтоб будет обозначать . как вообще любой символ, в том числе пробельный.
А .+? - жадный поиск, до первого <
   Сияющий в темноте
 
49 - 24.04.19 - 21:56
там фиксированный набор значений.
обеспробелить(считая перевод строки пробелом)а потом сравнить.
 
 Рекламное место пустует


Список тем форума
Рекламное место пустует  Рекламное место пустует
Читай всё полезное и впитывай, а нападки игнорируй. Здесь так принято. aka AMIGO
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует