2012-05-19 14 views
16

He estado usando el siguiente código Python para dar formato a una parte ID entero como una serie de números pieza con un formato:uso de Python cadena de formato a la inversa para analizar

pn = 'PN-{:0>9}'.format(id) 

Me gustaría saber si hay una manera para usar la misma cadena de formato ('PN-{:0>9}') en reversa para extraer el ID entero del número de parte formateado. Si eso no se puede hacer, ¿hay alguna manera de usar una cadena de formato único (o regex?) Para crear y analizar?

+2

No utilice el nombre de 'id'. También es el nombre de un built-in. – jamylak

+6

Si bien la regla básica de evitar nombres incorporados es buena, en la práctica, el 'id' incorporado rara vez se usa, y anularlo dentro del alcance de un método es poco probable que plantee algún problema. Esta regla es más aplicable cuando las personas nombran variables que anulan los tipos, como 'list',' dict', 'set', y' str'. – PaulMcG

Respuesta

20

"parse module" es el opuesto al formato() ".

Ejemplo de uso:

>>>import parse 
>>>format_string = 'PN-{:0>9}' 
>>>id = 123 
>>>pn = format_string.format(id) 
>>>pn 
'PN-000000123' 
>>>parsed = parse.parse(format_string, pn) 
>>>parsed 
<Result ('123',) {}> 
>>>parsed[0] 
'123'
0

Cómo sobre: ​​

id = int(pn.split('-')[1]) 

Esto divide el número de pieza en el tablero, toma la segunda componente y la convierte a un entero.

P.S. He mantenido id como el nombre de la variable para que la conexión a su pregunta sea clara. Es una buena idea cambiar el nombre de esa variable que no sombrea the built-in function.

+0

+1 La pregunta es un poco vaga sin ningún ejemplo, pero esto funciona. – jamylak

+3

La pregunta no es vaga en absoluto, y esta respuesta omite por completo el punto. El OP está buscando una única cadena que se pueda usar para dar formato a sus datos en una forma particular, y quiere usar esa misma cadena como una expresión regular para analizar el mismo texto en un entero. – PaulMcG

+0

Encontré que puedo obtener el número de identificación de la cadena de número de parte con 'id = int (re.search ('(? <= PN -) \ w +', pn) .group (0))', pero puedo usar esa expresión regular para crear una cadena a partir de la ID? (Ir de 1234 a PN-0000y luego de vuelta a 1234) – Josh

Cuestiones relacionadas