2016-10-02 5 views
2

Ich habe eine lange Reihe von Daten, die wie folgt aussieht:RegexMuster innerhalb Text

dstgfsda12345.123gsrsvrvsdfcsd23456.234tsrsd 

Beachten Sie, dass die ‚12.345,123‘ Muster ist das gleiche. Ich möchte die Zeichenfolge darauf mit Python (so s.split(<regex>)) teilen.

Was wäre die passende Regex?

'[0-9]{5}.[0-9]{3}' 

funktioniert nicht; Ich nehme an, dass es Whitespace um es herum erwartet (?).

Antwort

4

entkommen Nur ., und Sie sind fertig:

\d{5}\.\d{3} 

Sie Regex-Token \d als Abkürzung für [0-9] verwenden können.

Beispiel:

>>> re.split(r'\d{5}\.\d{3}', 'dstgfsda12345.123gsrsvrvsdfcsd23456.234tsrsd') 
['dstgfsda', 'gsrsvrvsdfcsd', 'tsrsd'] 
1

Ich verstehe nicht genau, was Ihr tatsächlicher Bedarf aber scheint, dass Sie Ihre regex wollen jedes Vorkommen von 5 Stellen zu isolieren, Punkt, 3-stellig.

Also anstelle von '[0-9]{5}.[0-9]{3}' müssen Sie '[0-9]{5}\.[0-9]{3}' verwenden, da . mit einem beliebigen Zeichen übereinstimmt, während \. nur mit einem Punkt übereinstimmt.

1

Ihr Regex sollte '\d{5}\.\d{3}' sein.

Überprüfen Sie die Verwendung von . anstelle von \.. Das ist, weil, '.' (Dot.) Entspricht im Standardmodus einem beliebigen Zeichen außer einem Zeilenumbruch. Siehe Dokument regex. Wobei \s in Ihrer Zeichenfolge dot bedeutet.

Zum Beispiel:

import re 
my_string = 'dstgfsda12345.123gsrsvrvsdfcsd23456.234tsrsd' 
my_regex = '\d{5}\.\d{3}' 
re.split(my_regex, my_string) 
# returns: ['dstgfsda', 'gsrsvrvsdfcsd', 'tsrsd'] 

Erklärung wie '\d{5}\.\d{3}' Werke:

\d jede Ziffer zwischen 0-9. \d{5} Unterzeichenfolge mit 5 aufeinanderfolgenden Ziffern. \. bedeutet Ziffern gefolgt von einzelnen .. Endlich \d{3} bedeutet 3 Ziffern nach .