Я решил это сам ...
Способ чтения пользовательских свойств документа:
import win32com.client as win32
word = win32.Dispatch("Word.Application")
word.Visible = 0
doc = word.Documents.Open(file)
try:
csp= doc.CustomDocumentProperties('property_you_want_to_know').value
print('property is %s' % csp)
except exception as e:
print ('\n\n', e)
doc.Saved= False
doc.Save()
doc.Close()
word.Quit()
Учитывая комментарий, я предполагаю, что вы действительно хотите спросить о соответствии шаблона «пробел, гекс, шестнадцатеричный» до первого несоответствия.
Это будет похоже на
a.map(&:chr).join.match(/^( \X\X)+/)[0]
. Он использует специальный заполнитель \X
для регулярных выражений, который соответствует шестнадцатеричным цифрам u̶p̶p̶e̶r̶c̶a̶s̶e̶ (0-9, A-F, a-f).
Дополнительная информация:
Опять же, исходя из моей интерпретации вопроса, если исходный массив длинный (или поток), нет необходимости использовать все это. Вам лучше прекратить генерировать символы как можно скорее:
hexs = "0123456789ABCDEF".split.map(&:ord)
a.
lazy.
each_slice(3).
take_while { |spc, h1, h2| spc == 32 && hexs.include?(h1) && hexs.include?(h2) }.
flat_map(&:chr).
to_a.
join
Таким образом, любая часть вашего целочисленного массива даже не учитывается.
Просто отфильтруйте его перед тем, как объединит массив в строку:
[" ", "9", "2", " ", "8", "3", " ", "A", "4", "\x82", "\x00"].
take_while(&"\x80".method(:>))
#⇒ [" ", "9", "2", " ", "8", "3", " ", "A", "4"]
Затем выполните все, что вы хотите, с результирующим массивом.