Извлеките необходимый текст, используя регулярные выражения в блокноте ++ - PullRequest
0 голосов
/ 10 марта 2020

У меня есть 10 000 символов длиной xml текста, и я должен разобрать имя переменной и значение рядом с ней.

 example of text:

 <? xml version="1.0" of encoding="UTF-8"?><abcdefghij><**ToDateTimestamp**>2019-01-01T10:41:18- 
 05:00</xyzefg><**shAMount**>8000.00</afsfda;sfkj;alkfl;kaf>
 <? xml version="1.0" of encoding="UTF-8"?><abcdefghij><**ToDateTimestamp**>2019-02-01T10:41:18- 
 05:00</xyzefg><**shAMount**>7000.00</afsfda;sfkj;alkfl;kaf>

В приведенном выше тексте у меня есть данные для двух переменных ToDateTimestamp и shAmount

Want:

ToDateTimestamp 2019-01-01T10:41:18-05:00
ToDateTimestamp 2019-02-01T10:41:18-05:00
shAmount 8000.00
shAmount 7000.00

Я пытался написать макрос в notepad ++, чтобы найти для определенного текста и повторить для всех записей, но «Запускать макрос несколько раз» не работает. Есть ли какой-либо подход Regex, чтобы очистить все и сохранить значения рядом с именем переменной, которую я упомянул? Я могу повторить этот шаг для каждой переменной в отдельности.

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 10 марта 2020

В то время как вы должны рассмотреть парсинг HTML / XML Я всегда заглядываю в Notepad ++ для очистки данных. Возможно, вам понадобится несколько раз, но вы можете получить кое-что, что может помочь ...

https://regex101.com/r/uAPi97/1

Теперь вышеприведенное в значительной степени основано на получении всех строки ...

<? xml version="1.0" of encoding="UTF-8"?><abcdefghij><**ToDateTimestamp**>2019-01-01T10:41:18-05:00</xyzefg><**shAMount**>8000.00</afsfda;sfkj;alkfl;kaf>

... по одной строке каждая. Так что отключите перенос слов и убедитесь, что они есть. Вам может понадобиться найти (в «режиме расширения») бит ...

<?

... и заменить его на ...

\r<?

... в качестве примера , Затем вы можете (возможно) использовать регулярные выражения, чтобы найти всю строку (вы должны найти всю строку), а затем захватить интересующие вас биты (они заключены в (), чтобы они были захвачены). Затем выполните поиск и замену в Notepad ++, но с выбранным режимом регулярных выражений.

Регулярное выражение ...

^.*?(\d+-\d+-\d+T\d+:\d+:\d+-\d+:\d+).*(shAMount).*?(\d+\.\d+).*$

... находит всю строку, а если заменить на ...

$1$2$3

... затем три бита в () из регулярного выражения возвращаются. Итак, это ...

<? xml version="1.0" of encoding="UTF-8"?><abcdefghij><**ToDateTimestamp**>2019-01-01T10:41:18-05:00</xyzefg><**shAMount**>8000.00</afsfda;sfkj;alkfl;kaf>
<? xml version="1.0" of encoding="UTF-8"?><abcdefghij><**ToDateTimestamp**>2019-02-01T10:41:18-05:00</xyzefg><**shAMount**>7000.00</afsfda;sfkj;alkfl;kaf>
<? xml version="1.0" of encoding="UTF-8"?><abcdefghij><**ToDateTimestamp**>2019-02-01T10:41:18-05:00</xyzefg><**shAMount**>7000.00</afsfda;sfkj;alkfl;kaf>
<? xml version="1.0" of encoding="UTF-8"?><abcdefghij><**ToDateTimestamp**>2019-02-01T10:41:18-05:00</xyzefg><**shAMount**>7000.00</afsfda;sfkj;alkfl;kaf>
<? xml version="1.0" of encoding="UTF-8"?><abcdefghij><**ToDateTimestamp**>2019-02-01T10:41:18-05:00</xyzefg><**shAMount**>7000.00</afsfda;sfkj;alkfl;kaf>
<? xml version="1.0" of encoding="UTF-8"?><abcdefghij><**ToDateTimestamp**>2019-02-01T10:41:18-05:00</xyzefg><**shAMount**>7000.00</afsfda;sfkj;alkfl;kaf>

.. вроде идет к этому ...

2019-01-01T10:41:18-05:00shAMount8000.00
2019-02-01T10:41:18-05:00shAMount7000.00
2019-02-01T10:41:18-05:00shAMount7000.00
2019-02-01T10:41:18-05:00shAMount7000.00
2019-02-01T10:41:18-05:00shAMount7000.00
2019-02-01T10:41:18-05:00shAMount7000.00

То, что может быть не на 100% тем, что вы хотите , но из там вы можете очистить его немного больше и сказать, найти (в расширенном режиме) 'shAMount' (без кавычек) и заменить на '\ rshAMount' (без кавычек). Несколько циклов поиска и замены, и вы можете быть ближе к своей цели.

Но да ... если вы делаете это много, проверьте Python и HTML Parser - больше для изучения, но достаточно мощный.

...