Имя: Пароль:
1C
1С v8
"Выкусить" текст из HTML
0 Мэс33
 
20.11.15
06:10
Есть такой кусок HTML - строка с ячейками:

<tr class="SectionAll">
<td class="TextItemSigDiffMod Wrap">&nbsp; HASH=&quot;<span class="TextSegSigDiff">75F0F2F0601D696D026B5F</span><span class="TextSegSigDiff">9</span><span class="TextSegSigDiff">2B1B2468</span><span class="TextSegSigDiff">2</span>&quot;&gt;</td>
<td class="AlignCenter Wrap">&lt;&gt;</td>
<td class="TextItemSigDiffMod Wrap">&nbsp; HASH=&quot;<span class="TextSegSigDiff">9</span><span class="TextSegSigDiff">F89</span><span class="TextSegSigDiff">D5A5D</span><span class="TextSegSigDiff">23</span><span class="TextSegSigDiff">53CA3D93528</span><span class="TextSegSigDiff">80D732E539</span>&quot;&gt;</td>
</tr>

Нужно выдернуть HASH.

То есть получить на выходе два значения:
HASH="75F0F2F0601D696D026B5F92B1B24682"
HASH="9F89D5A5D2353CA3D9352880D732E539"

Подскажете как? Что-то с утра туплю.
И да, теги <span> могут быть в разных местах.
И да, решение можно не в 1С.
Встречающийся &nbsp;  может быть один или несколько. Досконально не проверял, у меня этих файлов 799 штук.
1 Kandellaster
 
20.11.15
06:36
через regexp, примеры шаблона регулярного выражения и использования regexp в 1С хорошо гугляца
2 Мэс33
 
20.11.15
06:37
(1) Я не сильно дружу с regexp. Подскажете вариант решения?
3 Kandellaster
 
20.11.15
06:40
что то вроде этого /^[a-f0-9]{32}$/i
4 Мэс33
 
20.11.15
06:42
(3) Проверил тут - https://regex101.com/#python
Что-то не пойму.
5 Горогуля
 
20.11.15
06:45
откуда второй хэш выдумал?
6 ASV
 
20.11.15
06:48

Т="<tr class=SectionAll>
|<td class=TextItemSigDiffMod Wrap>&nbsp; HASH=&quot;<span class=TextSegSigDiff>75F0F2F0601D696D026B5F</span><span class=TextSegSigDiff>9</span><span class=TextSegSigDiff>2B1B2468</span><span class=TextSegSigDiff>2</span>&quot;&gt;</td>
|<td class=AlignCenter Wrap>&lt;&gt;</td>
|<td class=TextItemSigDiffMod Wrap>&nbsp; HASH=&quot;<span class=TextSegSigDiff>9</span><span class=TextSegSigDiff>F89</span><span class=TextSegSigDiff>D5A5D</span><span class=TextSegSigDiff>23</span><span class=TextSegSigDiff>53CA3D93528</span><span class=TextSegSigDiff>80D732E539</span>&quot;&gt;</td>
|</tr>";

Т= СтрЗаменить(Т,Символы.ПС,"");
Т= СтрЗаменить(Т,"<",Символы.ПС+"<");
Т= СтрЗаменить(Т,">",">"+Символы.ПС);

Т= СтрЗаменить(Т,"&nbsp;","");
Т= СтрЗаменить(Т,"&quot;","");
Т= СтрЗаменить(Т,"&lt;","");
Т= СтрЗаменить(Т,"&gt;","");

Кол = СтрЧислоСтрок(Т);
СтрИтог="";
Для Сч=1 По Кол Цикл
    Стр = СтрПолучитьСтроку(Т,Сч);
    Если Лев(Стр,1)="<" Тогда
        Продолжить;
    КонецЕсли;
    СтрИтог=СтрИтог+Стр;
КонецЦикла;
СтрИтог= СтрЗаменить(СтрИтог,"HASH",Символы.ПС+"HASH");
Сообщить(СтрИтог);
7 Горогуля
 
20.11.15
06:48
вижу. может, убрать все тэги со спанами для начала, они ж одинаковые. ну и слова с амперсандами
8 michael512
 
20.11.15
06:54
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
RegExp.Pattern = "<.*?>";
Результат = RegExp.Replace(ИсходнаяСтрока, "");
Результат = СтрЗаменить(Результат,"&nbsp;", "");
Результат = СтрЗаменить(Результат,"&lt;", "");
Результат = СтрЗаменить(Результат,"&gt;", "");
Результат = СтрЗаменить(Результат,"&quot;", """");
Результат = СтрЗаменить(Результат," ", "");

вот накодил
9 michael512
 
20.11.15
06:56
ну и из результата удалить пару лишних символов.ПС
10 Мэс33
 
20.11.15
06:56
(8) Хорошая идея - очистить все от <...>, а потом остаток вычистить.
(6) Спасибо.

А я думал - по DOM пробежаться, по тегам пропарсить. Проще работать как с текстом.
11 michael512
 
20.11.15
06:58
(10) не за что ;) всегда так делаю, сначала тэги потом остальное
12 michael512
 
20.11.15
08:56
Приступ перфекционизма напал сделал более отшлифованный вариант:

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = СтрЗаменить(ИсходнаяСтрока,"&quot;", """");
RegExp.Pattern = "<.*?>|&.*?;|[ ]*";
Результат = RegExp.Replace(ИсходнаяСтрока, "");
13 Мэс33
 
20.11.15
09:30
(12) &quot - даже не нужно менять
14 Мэс33
 
20.11.15
09:38
(12) Бинго, красиво и лаконично

import re

def clean_html(tt):
    return re.sub("<.*?>|&.*?;|[ ]*", '', tt).strip()
    return tt

f = open("APACC_01.ddc.xml.html")
fd = f.readlines()

hash1 = clean_html(fd[81])
hash2 = clean_html(fd[83])

print hash1
print hash2
15 Lama12
 
20.11.15
09:52
А ПолучитьТекст() разве не то вернет?
16 michael512
 
20.11.15
16:09
(15) Использование регэкспов более универсально, применимо для любых ЯП, можно даже батник сварганить
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан