2016-08-04 17 views
2

Ich habe eine Textdatei, die von Excel kam. Ich weiß nicht, wie man fünf Ziffern nach einem bestimmten Zeichen nimmt.Extrahieren von Zahlen in Textdatei

Ich möchte nur fünf Ziffern nach #ACA in einer Textdatei nehmen.

mein Text ist wie:

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 

ich alle 5 Ziffern nehmen wollen, die nach #ACA kommt, so:

16018, 16019, 17660, etc ...

Antwort

1

Powershell-Lösung:

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

Ausgang:

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

danke sehr viel –

+0

Wie kann ich uniq die Ausgabe sortieren, nachdem ich das yenscript.ps1 ausgeführt habe? –

+1

Passen Sie das Ergebnis einfach an das Cmdlet Sortieren an, indem Sie '| verwenden sort' –

2

Dies sollte es tun

import re 

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

Wenn Sie den gesamten Text in der Variablen str_var

Ausgang:

['16018', '16019', '17660', '16560', '15623', '17804', '17602', '17604', '56169', '17606', '17608', '18635'] 
2

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

+0

vielen Dank –

+0

danke sehr viel –

2

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

+0

vielen Dank –

+1

Gern geschehen, aber keine Notwendigkeit, die Post mit "Danke" überall zu stören, es wird allgemein angenommen, dass die Menschen dankbar sind;) Oder wenn Sie wirklich "brauchen", um allen zu danken, hinterlassen Sie einfach einen allgemeinen Kommentar :) – Julien

5
grep -oP '#ACA\K[0-9]{5}' file.txt 
  • #ACA\K wird #ACA passen, aber nicht als Teil der Ausgabe
  • [0-9]{5} fünf Ziffern gedruckt folgende #ACA

Wenn variable Anzahl von Stellen benötigt werden, verwenden

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

vielen Dank –

+0

Sie könnten auch Limit '5' zu der Anzahl der Ziffern hinzufügen. – Chaker

+0

wird das hinzufügen, um zu antworten, danke – Sundeep

3

Wenn Sie nicht wissen, oder nicht gefällt regulären Ausdrücken können Sie dies tun, obwohl der Code ein wenig länger ist:

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 
Verwandte Themen