2016-08-04 1 views
2

У меня есть текстовый файл, который пришел от Excel. Я не знаю, как взять пять цифр после определенного персонажа.Извлечение чисел в текстовом файле

Я хочу взять только пять цифр после #ACA в текстовом файле.

мой текст как:

ERROR_MESSAGE 
(((#ACA16018)|(#ACA16019))&(#AQV71767='')&(#AQV71765='2'))?1:((#AQV71765='4')?1:((#AQV71767$'')?(((#AQV71765='1')|(#AQV71765='3'))?1:'Hasar veya Lehe Hukuk seçebilirsiniz'):'Rücu sıra numarasını yazıp Hasar veya Lehe Hukuk seçebilirsiniz')) 
Rücu Oranı Girilmesi Zorunludur...' 
#ACA17660 
#ACA16560 
#ACA15623 
#ACA17804 
BU ALANI BOŞ GEÇEMEZSİNİZ.EKSPER RAPORU GELMEDEN DY YE GERİ GÖNDEREMEZSİNİZ. PERT İHBARI VARSA PERT ÇALINMA OPERASYONU AKTİVİTESİ OLUŞTURULMALIDIR. 
(#TSC[T008UNSMAS;FIRM_CODE=2 AND UNIT_TYPE='SG' AND UNIT_NO=#AQV71830]>0)?1:'Girdiğiniz değer fihristte yoktur' 
#ACA17602 
#ACA17604 
#ACA56169 
BU ALANI BOŞ GEÇEMEZSİNİZ 
#ACA17606 
#ACA17608 
(#AQV71835='')?'Boş geçilemez':1 
Lütfen Gönderilecek Kişinin Mail Adresini Giriniz ! ' 
LÜTFEN RED NEDENİNİ GİRİNİZ. 
EKSİK BİLGİ/BELGE ALANINA GİRMİŞ OLDUĞUNUZ DEĞER YANLIŞ VEYA GEÇERŞİZDİR!!! LÜTFEN KONTROL EDİP TEKRAR DENEYİNİZ.' 
BU ALAN BOŞ GEÇİLEMEZ. ÖDEME YAPILMADAN EK ÖDEME SÜRECİNİ BAŞLATAMAZSINIZ. 
ONAYLANDI VE REDDEDİLDİ SEÇENEKLERİNİ KULLANAMAZSINIZ 
BU ALAN BOŞ GEÇİLEMEZ.EVRAKLARINIZI , VARSA EKSPER RAPORUNU VE MUALLAĞI KONTROL EDİNİZ. 
Muallak Tutarını kontrol ediniz. 
'OTO BRANŞINDA REDDEDİLDİ NEDENİ SEÇMELİSİNİZ' 
'OTODIŞI BRANŞINDA REDDEDİLDİ NEDENİ SEÇMELİSİNİZ' 
(#AQV70003$'')?((#TSC[T001HASIHB;FIRM_CODE=#FP10100 AND COMPANY_CODE=2 AND CLAIM_NO=#AQV70003]$0)?1:'Bu dosya sistemde bulunmamaktadır'):'Bu alan boş geçilemez' 
(#AQV70503='')?'Bu alan boş geçilemez.':((#ACA18635=1)?1:'Mağdura ait uygun kriterli ödeme kaydı mevcut değildir.') 
(#AQV71809=0)?'Boş geçilemez':1 
(#FD101AQV71904_AFDS<0)?'Tarih bugünün tarihinden büyük olamaz 

Я хочу взять каждые 5 цифр, которые приходят после того, как #ACA, так:

16018, 16019, 17660 и т.д ...

ответ

1

PowerShell:

$contet = Get-Content -Raw 'your_file' 
$match = [regex]::Matches($contet, '#ACA(\d{5})') 
$match | ForEach-Object { 
    $_.Groups[1].Value 
} 

Выход:

16018 
16019 
17660 
16560 
15623 
17804 
17602 
17604 
56169 
17606 
17608 
18635 
+0

спасибо much –

+0

Как я могу сортировать выход uniq после запуска myscript.ps1? –

+1

Просто введите результат в командлет Sort, используя '| sort' –

2

Это должно сделать это

import re 

print(re.findall("#ACA(\d+)",str_var)) 

Если у вас есть весь текст в переменной str_var

Выход:

['16018', '16019', '17660', '16560', '15623', '17804', '17602', '17604', '56169', '17606', '17608', '18635'] 
решение
2

re.findall(r'#ACA(\d{5})', str_var)

+0

большое спасибо –

+0

большое спасибо –

2

[x[:5] for x in content.split("#ACA")[1:]]

+0

большое спасибо –

+1

Добро пожаловать, но не нужно загромождать сообщение «спасибо» повсюду, обычно считается, что люди благодарны;) Или, если вам действительно нужно «поблагодарить всех, просто оставьте общий комментарий :) – Julien

5
grep -oP '#ACA\K[0-9]{5}' file.txt 
  • #ACA\K будет соответствовать #ACA, но не печататься как часть производства
  • [0-9]{5} пять цифр следующие #ACA

Если переменное число цифр необходимо использовать

grep -oP '#ACA\K[0-9]+' file.txt 
+0

большое спасибо –

+0

Вы также можете добавить ограничение« 5 »к ​​числу цифр. – Chaker

+0

добавит, что ответить, спасибо – Sundeep

3

Если вы не знаете или не нравится регулярные выражения, вы можете сделать это, хотя код немного больше:

if __name__ == '__main__': 
    pattern = '#ACA' 
    filename = 'yourfile.txt' 
    res = list() 
    with open(filename, 'rb') as f: # open 'yourfile.txt' in byte-reading mode 
     for line in f: # for each line in the file 
      for s in line.split(pattern)[1:]: # split the line on '#ACA' 
       try: 
        nb = int(s[:5]) # take the first 5 characters after as an int 
        res.append(nb) # add it to the list of numbers we found 
       except (NameError, ValueError): # if conversion fails, that wasn't an int 
        pass 
    print res # if you want them in the same order as in the file 
    print sorted(res) # if you want them in ascending order