Solución:
Eso es un poco complicado. Primero comienza a hacer coincidir desde un carácter que no es un espacio en blanco y luego continúa haciendo coincidir de manera lenta pero segura hasta la posición que es seguida inmediatamente por un número opcional de espacios y una barra diagonal:
S.*?(?= */)
Vea la demostración en vivo aquí
Si la marca de barra puede ser el primer carácter que no sea un espacio en blanco en la cadena de entrada, reemplace S
con [^s/]
:
[^s/].*?(?= */)
Esta expresión es lo que quizás desee explorar:
^(.*?)(s+/.*)$
Aquí, tenemos dos grupos de captura donde el primero recopila su salida deseada, y el segundo es su patrón no deseado, delimitado por caracteres de inicio y final, solo para estar seguro que puede eliminarse si lo desea:
(.*?)(s+/.*)
Prueba de Python
# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"^(.*?)(s+/.*)$"
test_str = ("123 / some text 123n"
"anything else / some text 123")
subst = "\1"
# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)
if result:
print (result)
# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
Demostración de JavaScript
const regex = /^(.*?)(s+/.*)$/gm;
const str = `123 / some text 123
anything else / some text 123`;
const subst = `n$1`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log('Substitution result: ', result);
RegEx
Si esta no era su expresión deseada, puede modificar / cambiar sus expresiones en regex101.com.
Circuito RegEx
También puede visualizar sus expresiones en jex.im:
Espacios
Para los espacios antes de la salida deseada, simplemente podemos agregar un grupo de captura con una búsqueda hacia atrás negativa:
^(s+)?(.*?)(s+/.*)$
Demostración de JavaScript
const regex = /^(s+)?(.*?)(s+/.*)$/gm;
const str = ` 123 / some text 123
anything else / some text 123
123 / some text 123
anything else / some text 123`;
const subst = `$2`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log('Substitution result: ', result);
Manifestación
Aquí hay una posible solución
Regex
(?<!/)S.*S(?=s*/)
Ejemplo
# import regex # or re
string = ' 123 / some text 123'
test = regex.search(r'(?<!/)S.*S(?=s*/)', string)
print(test.group(0))
# prints '123'
string = 'a test / some text 123'
test = regex.search(r'(?<!/)S.*S(?=s*/)', string)
print(test.group(0))
# prints 'a test'
Breve explicación
-
(?<!/)
dice que antes de una posible coincidencia no puede haber/
símbolo. -
S.*S
partidos perezosamente cualquier cosa (.*
) mientras se asegura de que no comience ni termine con un espacio en blanco (S
) -
(?=s*/)
significa que una posible coincidencia debe ir seguida de una/
símbolo o por espacios en blanco + a/
.