¿Cómo puedo obtener una cadena después de una subcadena específica?
Por ejemplo, quiero obtener la cadena después "world"
demy_string="hello python world , i'm a beginner "
La forma más fácil es probablemente dividir su palabra objetivo
my_string="hello python world , i'm a beginner "
print my_string.split("world",1)[1]
dividir toma la palabra (o carácter) para dividir y, opcionalmente, un límite para el número de divisiones.
En este ejemplo, divida en "mundo" y limítelo a una sola división.
target.split('lower',1)[-1].split('low',1)[-1]
my_string.partition("world")[-1]
(o...[2]
) es más rápido.Si desea tratar el caso en el
s2
que no está presentes1
, utilices1.find(s2)
en lugar deindex
. Si el valor de retorno de esa llamada es-1
, entoncess2
no está ens1
.fuente
print( s1[s1.index(s2) + len(s2):] is s1[s1.index(s2) + len(s2):])
Me sorprende que nadie lo haya mencionado
partition
.En mi humilde opinión, esta solución es más legible que @ arshajii. Aparte de eso, creo que @ arshajii's es el mejor para ser el más rápido: no crea copias / subcadenas innecesarias.
fuente
str.split(..., 1)
.Quieres usar
str.partition()
:porque esta opción es más rápida que las alternativas .
Tenga en cuenta que esto produce una cadena vacía si falta el delimitador:
Si desea tener la cadena original, pruebe si el segundo valor devuelto
str.partition()
no está vacío:También puede usar
str.split()
con un límite de 1:Sin embargo, esta opción es más lenta . Para el mejor de los casos,
str.partition()
es fácilmente un 15% más rápido en comparación constr.split()
:Esto muestra los tiempos por ejecución con entradas aquí, falta el delimitador (peor de los casos), colocado primero (mejor de los casos), o en la mitad inferior, la mitad superior o la última posición. El tiempo más rápido está marcado con
[...]
y<...>
marca el peor.La tabla anterior se produce mediante una contrarreloj integral para las tres opciones, que se presenta a continuación. Ejecuté las pruebas en Python 3.7.4 en un modelo 2017 Macbook Pro de 15 "con Intel Core i7 a 2.9 GHz y 16 GB de RAM.
Este script genera oraciones aleatorias con y sin el delimitador seleccionado al azar presente, y si está presente, en diferentes posiciones en la oración generada, ejecuta las pruebas en orden aleatorio con repeticiones (produciendo los resultados más justos que representan los eventos aleatorios del sistema operativo que tienen lugar durante la prueba), y luego imprime una tabla de resultados:
fuente
Si desea hacer esto usando expresiones regulares, simplemente puede usar un grupo que no captura , para obtener la palabra "mundo" y luego tomar todo después, como así
La cadena de ejemplo se prueba aquí
fuente
result = re.search(r"(?:world)(.*)", "hello python world , i'm a beginner ").group(1)
Puede usar este paquete llamado "subcadena". Simplemente escriba "pip install substring". Puede obtener la subcadena simplemente mencionando los caracteres / índices iniciales y finales.
Por ejemplo:
Salida:
s = defghijklmn
fuente
Es una vieja pregunta, pero me enfrenté al mismo escenario, necesito dividir una cadena usando como palabra "bajo", el problema para mí fue que tengo en la misma cadena la palabra de abajo y más abajo.
Lo resolví usando el módulo re de esta manera
use re.split con regex para que coincida con la palabra exacta
El código genérico es:
¡Espero que esto pueda ayudar a alguién!
fuente
string.partition(" low ")[2]
:? (Tenga en cuenta los espacios a cada lado delow
Pruebe este enfoque general:
fuente
En Python 3.9,
removeprefix
se agrega un nuevo método:fuente