Получить число, присутствующее после определенного шаблона совпадающей строки, состоящей из слова и числа

UPDATE Вы можете использовать Apache Commons Codec (версия 1.7+), чтобы выполнить это задание для вас.

DigestUtils.sha1Hex(stringToConvertToSHexRepresentation)

Благодаря @ Jon Onstott для этого предложения.


Старый ответ Преобразуйте байт-массив в шестнадцатеричную строку. Real How How сообщает вам, как .

return byteArrayToHexString(md.digest(convertme))

и (скопирован из Real's How To)

public static String byteArrayToHexString(byte[] b) {
  String result = "";
  for (int i=0; i < b.length; i++) {
    result +=
          Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 );
  }
  return result;
}

Кстати, вы можете получить более компактное представление с использованием Base64. Apache Commons Codec API 1.4, имеет эту приятную утилиту, чтобы убрать всю боль. см. здесь

-1
задан glennsl 11 April 2019 в 16:09
поделиться

1 ответ

Для того, чтобы получить желаемый результат, вам необходимо внести небольшие изменения. В вашем

my_list = ['Ref.:', 'Reference', 'tramite', 'Expediente', 'Expediente No', 'Expedien N°', 'Exp.No', 'Expedien', 'Expedien N0']

Вы указали Expedien перед Expedien N0, из-за чего в text Expedien N0 18-00232995 текст Expedien совпадает, а N0 совпадает во второй группе и не оставляет области для сопоставления [118 ] как это происходит позже. Следовательно, если вы просто измените порядок в вашем списке и поместите Expedien N0 перед Expedien, то Expedien N0 соответствует первой группе, а 18-00232995 будет захвачено во второй группе и даст вам желаемые результаты. Проверьте ваш модифицированный код Python ниже,

import re
s="""text Expedien N0 18-00232995
$cat input_file
some text before Expedien: 1-21-212-16-26 some random text
Reference RE9833 of all sentences.
abc
123
456
something blah blah Ref.: 
tramite  1234567
Ref.:
some junk Expedien N° 18-00777 # some new content
some text Expedien N°18-0022995 # some garbled content"""
my_list = ['Ref.:', 'Reference', 'tramite', 'Expediente', 'Expediente No', 'Expedien N°', 'Exp.No', 'Expedien N0', 'Expedien']

rx = r'(?<!\w)({})\W*([A-Z]*\d+(?:-+[A-Z]*\d+)*)'.format('|'.join(map(re.escape,my_list)))
print(rx)
print(re.findall(rx, s))

Prints,

[('Expedien N0', '18-00232995'), ('Expedien', '1-21-212-16-26'), ('Reference', 'RE9833'), ('tramite', '1234567'), ('Expedien N°', '18-00777'), ('Expedien N°', '18-0022995')]
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ You have your intended tuple here in your findall results
0
ответ дан Pushpesh Kumar Rajwanshi 11 April 2019 в 16:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: