|
Как удалить строки по шаблону из текста? | ☑ | ||
---|---|---|---|---|
0
D_Pavel
24.04.13
✎
09:02
|
Есть текст XML, нужно удалить все строки типа <Адрес>*****</Адрес> чтобы сократить размер, где ***** каждый раз меняется. Как их все удалить? Поиск и замена по подстроке не поможет, так как искомая строка заранее не известна.
|
|||
1
Wobland
24.04.13
✎
09:03
|
можно просто не обращать внимания на адрес при чтении
|
|||
2
Wobland
24.04.13
✎
09:03
|
или даже не выгружать адрес при записи
|
|||
3
Кирпич
24.04.13
✎
09:04
|
Для этого придуманы регулярные выражения
|
|||
4
D_Pavel
24.04.13
✎
09:08
|
(1) не получится, тут нет разбора по строкам ПрочитатьXML(ЧтениеXML); Переписывать весь механизм не выгодно.
(2) Не получится, данные выгружаются командой ЗаписатьXML(ЗаписьXML, Данные); |
|||
5
Рэйв
24.04.13
✎
09:12
|
перебери xml как текст построчно, ищи в строке через Найти сначала <Адрес>и начиная с него формируй строку ан удаление до </Адрес> включительно.
Потом СтрЗаменить(СтрокаТекста,СтрНаУдаление,"") |
|||
6
Defender aka LINN
24.04.13
✎
09:16
|
Регулярные выражения
|
|||
7
Кирпич
24.04.13
✎
09:17
|
Похоже, автор ожидает готовый вариант решения его проблемы. Те самые восемь строк, которые добрый дядя ему сюда запостит. Сейчас так модно.
|
|||
8
Rie
24.04.13
✎
09:17
|
(0)
Рег = Новый COMОбъект("VBScript.RegExp"); Рег.Pattern = "<Адрес>.*</Адрес>"; Рег.Global = Истина; Рег.Replace(ТвойТекст,""); |
|||
9
Defender aka LINN
24.04.13
✎
09:18
|
(7) А вот и дядя нашелся
|
|||
10
Кирпич
24.04.13
✎
09:18
|
:))
|
|||
11
Кирпич
24.04.13
✎
09:20
|
Интересно, спасибо скажет или нет.
|
|||
12
D_Pavel
24.04.13
✎
09:28
|
(5) Ну можно так...
|
|||
13
D_Pavel
24.04.13
✎
09:30
|
(8) Так уже сделал, не везде получилось.
RegExp.Pattern = "(\<ТЧасть\>.+\<\/ТЧасть\>)"; СтрокаОбмена=RegExp.Replace(СтрокаОбмена, ""); Не удаляется многострочный например такой текст: <ТЧасть> <Row> <ФИО>Нургалиева Елена Геннадьевна</ФИО> <Должность>директор</Должность> <Дата>2007-09-13T00:00:00</Дата> <ПаспортныеДанные/> <Телефон/> </Row> </ТЧасть> |
|||
14
Wobland
24.04.13
✎
09:31
|
(13) не так ты сделал
|
|||
15
D_Pavel
24.04.13
✎
09:33
|
(14) что не так?
|
|||
16
Wobland
24.04.13
✎
09:34
|
(15) у Rie звезда, у тебя плюс. но я тут не помощник, не помню тонкостей
|
|||
17
Defender aka LINN
24.04.13
✎
09:36
|
(13) Ну, кроме Pattern там еще пара-тройка свойств есть...
И на форуме тут Орефков, кажись, выкладывал ВК |
|||
18
D_Pavel
24.04.13
✎
09:37
|
(16) звезда и плюс - это без разницы в данном случае, так как не может быть в этом месте меньше одного символа.
|
|||
19
MSII
24.04.13
✎
09:37
|
(13) Не соответствует твоя строка паттерну, вот и не удаляется.
|
|||
20
D_Pavel
24.04.13
✎
09:39
|
(17) все свойства ставил и истина, и -1, никакой разницы, все равно не находит.
|
|||
21
D_Pavel
24.04.13
✎
09:39
|
(19) Спасибо, К.О.
|
|||
22
D_Pavel
24.04.13
✎
09:40
|
(16) со звездой проверил тоже. Не находитю
|
|||
23
MSII
24.04.13
✎
09:42
|
(22) *? - а так?
|
|||
24
orefkov
24.04.13
✎
09:43
|
. - это любой символ, кроме перевода строки.
Если нужен действительно любой символ, надо использовать [\s\S] И со звездочкой аккуратнее - удалит все от первого открывающего тега до последнего, лучше ее жадность обуздать знаком вопроса. Вот так примерно: <ТЧасть>[\s\S]*?<\/ТЧасть> |
|||
25
orefkov
24.04.13
✎
09:45
|
(17)
Выкладывал. ВК - http://snegopat.ru/downloads/rex-v8-1.0.0.2.zip Описание - http://snegopat.ru/scripts/doc/trunk/rex/readme.markdown |
|||
26
orefkov
24.04.13
✎
10:05
|
+(24) Проверил, все находит:
http://snegopat.ru/files/tmp/regex1.png |
|||
27
Defender aka LINN
24.04.13
✎
10:20
|
VBScript.RegExp тоже находит :)
|
|||
28
orefkov
24.04.13
✎
10:25
|
(27)
На скриншоте как раз он и работает, вернее его брат из JScript :) Пост был не про мою ВК, а про правильный шаблон поиска. |
|||
29
D_Pavel
24.04.13
✎
11:06
|
(23) А так вот как получается: Ошибка при вызове метода контекста (Replace)
по причине: Произошла исключительная ситуация (0x800a139a) |
|||
30
D_Pavel
24.04.13
✎
11:32
|
(24) Спасибо, так само то!
|
|||
31
D_Pavel
24.04.13
✎
13:37
|
Не работает!
Как удалить строку только в нужных местах? Например нужно удалить <Адрес/> ТОЛЬКО внутри конструкции "<Удалять>": <НеУдалять> <Адрес/> </НеУдалять> <Удалять> <Адрес/> </Удалять> У меня получается что везде удаляет. |
|||
32
D_Pavel
24.04.13
✎
13:45
|
А, все, сам разобрался.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |