2017-02-12 5 views
0

ich eine Textdatei, die wie folgt aussieht:Verwenden regex eine beliebige Anzahl mit einer Dezimalstelle finden

15372185 ChocolateBiscuit 1.20 
13281038 AppleJuice 1.50 
26419633 TomatoSoup 2.10 
74283187 SpringRolls 0.90 

Grundsätzlich möchte ich eine beliebige Anzahl entsprechen, die eine Dezimalstelle hat (das ist die letzte Zahl ist für . jede Zeile, um die 8-stellige Nummer am Anfang und die Beschreibung i dies habe zu finden:

codes = re.findall(r'\d{8}', fread) 
details = re.findall(r'\b[A-Z][a-z]*[A-Z][a-z]*', fread) 

I i ähnlich verwenden, um etwas davon ausgehen, alle Zahlen mit Dezimalstellen finden ich verstehe einfach nicht, wie ich das tun würde, dass

+0

Ja, weil ich eine andere Version von meinem Code zu entwickeln. Ich wollte Regex verwenden (da ich neu bin und ich verstehe, wie man es besser benutzt). – Anya

Antwort

0
with open('test.txt', 'r') as f: 
    file = f.read() 
re.findall(r'\b\d+\.\d+\b', file) 

Ergebnisse:

['1.20', '1.50', '2.10', '0.90'] 

Suche nach einem beliebigen Anzahl von Ziffern, die Dezimalstelle umgeben, in Grenzen einschließen.

Wenn Sie müssen auch Zahlen erfassen wie .23, zu verwenden:

re.findall(r'[\d+]*\.\d+', file) 
+0

Funktioniert nicht für '.23'. – DyZ

+1

Ich nehme an, die Nummer wäre 0,23, nein? – gregory

+0

Warum sollte es? '.23' ist eine absolut gültige reelle Zahl. – DyZ

0

ein Spiel String einschließlich der Annahme von Nummern wie“.23 Erstellen 'text

Dim fileText As String = "WhereEver.txt" 

passen Get' "

Dim Reg As New Regex("(\d) (.+) (\d\.\d|\.\d)", RegexOptions.Multiline) 

'Erhalten Sie alle Treffer innerhalb der Zeichenfolge.

Dim regMatch As MatchCollection = Reg.Matches(fileText) 

'Iterieren Sie durch jede Gruppe und erhalten Sie das 3. Element, welches die Dezimalzahl wäre.

For x = 0 To regMatch.Count - 1 
    DoWhatEverYouNeedToDoWithIt() 
    MsgBox(regMatch.Item(x).Groups.Item(3).Value) 
Next 

Kann Item() 1 bis 3 (1 ist die 8-stellige Nummer, 2, den Namen zu sein, und 3 die dezimal) withing die For[...] zurückzukehren bekommen, welchen Wert Sie wollen. Oder die ganze Gruppe, um alles zu bekommen. Artikel 3 wird in meinem Beispielcode verwendet.

Alle Code: (Getestet & Werke)

Dim fileText As String = "WhereEver.txt" 
Dim Reg As New Regex("(\d) (.+) (\d\.\d|\.\d)", RegexOptions.Multiline) 
Dim regMatch As MatchCollection = Reg.Matches(fileText) 
For x = 0 To regMatch.Count - 1 
    MsgBox(regMatch.Item(x).Groups.Item(3).Value) 
Next 
Verwandte Themen