2011-11-23 22 views

Respuesta

19

necesita dividir la cadena:

>>> s = 'http://www.domain.com/?s=some&two=20' 
>>> s.split('&') 
['http://www.domain.com/?s=some', 'two=20'] 

que devolverá una lista como se puede ver lo que puede hacer:

>>> s2 = s.split('&')[0] 
>>> print s2 
http://www.domain.com/?s=some 
5
string = 'http://www.domain.com/?s=some&two=20' 
cut_string = string.split('&') 
new_string = cut_string[0] 
print(new_string) 
+0

Esto no funcionará si hay otros ampersands en la URL. – Claudiu

+2

Respondí la pregunta como todos, no pidió una excepción. Entonces, para dar el ejemplo que dio, esta es la manera pitónica más simple de hacerlo. –

+0

Ah, eso es cierto. Pensé que había preguntado cómo quitar el ampersand derecho en una cuerda (así que pensé que sería mejor si le dieras 'string.rsplit ('&', 1)'), pero él no preguntó eso necesariamente. – Claudiu

4

Puede utilizar find()

>>> s = 'http://www.domain.com/?s=some&two=20' 
>>> s[:s.find('&')] 
'http://www.domain.com/?s=some' 

O or supuesto, si hay una posibilidad de que la buscó para el texto no estará presente entonces usted necesita para escribir más larga código:

pos = s.find('&') 
if pos != -1: 
    s = s[:pos] 

Mientras que usted puede hacer algunos progresos utilizando un código como éste, las situaciones más complejas exigen un cierto Analizador de URL.

2
>>str = "http://www.domain.com/?s=some&two=20" 
>>str.split("&") 
>>["http://www.domain.com/?s=some", "two=20"] 
35

Bueno, para contestar la pregunta inmediata:

>>> s = "http://www.domain.com/?s=some&two=20" 

rfind método devuelve el índice de más a la derecha subcadena:

>>> s.rfind("&") 
29 

Usted puede tomar todos los elementos hasta un índice dado con el operador rebanar:

>>> "foobar"[:4] 
'foob' 

Poniendo los dos juntos:

>>> s[:s.rfind("&")] 
'http://www.domain.com/?s=some' 

Si está tratando con direcciones URL en particular, es posible que desee utilizar las bibliotecas integradas que tratan con las direcciones URL.Si, por ejemplo, que quería eliminar two de lo anterior cadena de consulta:

En primer lugar, analizar la URL en su conjunto:

>>> import urlparse, urllib 
>>> parse_result = urlparse.urlsplit("http://www.domain.com/?s=some&two=20") 
>>> parse_result 
SplitResult(scheme='http', netloc='www.domain.com', path='/', query='s=some&two=20', fragment='') 

Saque sólo la cadena de consulta:

>>> query_s = parse_result.query 
>>> query_s 
's=some&two=20' 

convertirlo en un dict:

>>> query_d = urlparse.parse_qs(parse_result.query) 
>>> query_d 
{'s': ['some'], 'two': ['20']} 
>>> query_d['s'] 
['some'] 
>>> query_d['two'] 
['20'] 

Retire la 'two' llave del dict:

>>> del query_d['two'] 
>>> query_d 
{'s': ['some']} 

ponerlo de nuevo en una cadena de consulta:

>>> new_query_s = urllib.urlencode(query_d, True) 
>>> new_query_s 
's=some' 

Y ahora coser la URL de nuevo juntos:

>>> result = urlparse.urlunsplit((
    parse_result.scheme, parse_result.netloc, 
    parse_result.path, new_query_s, parse_result.fragment)) 
>>> result 
'http://www.domain.com/?s=some' 

La ventaja de esto es que se tener más control sobre la URL. Al igual que, si siempre quiso quitar el argumento two, aunque se puso anteriormente en la cadena de consulta ("two=20&s=some"), esto todavía hacer lo correcto. Puede ser excesivo dependiendo de lo que quieras hacer.

+1

+1 Una excelente respuesta. –

+0

Buena respuesta con información adicional. +1 –

1
s[0:"s".index("&")] 

¿Qué hace esto:

  • tomar una rebanada de la cadena que comienza en el índice 0, hasta, pero sin incluir el índice de & en la cadena.
Cuestiones relacionadas