Saltar al contenido

Coincidencia de Python Regex antes del carácter E ignorar el espacio en blanco

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.

ingrese la descripción de la imagen aquí

Circuito RegEx

También puede visualizar sus expresiones en jex.im:

ingrese la descripción de la imagen aquí

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

ingrese la descripción de la imagen aquí

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 /.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *