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

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

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

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

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

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

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

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

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

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

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

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

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

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