Para empezar, la expresión regular es probablemente el aspecto menos talentoso dentro de mi cinturón de programación, esto es lo que tengo hasta ahora:
\D{1,5}(PR)\D+$

\D{1,5} porque los símbolos de acciones comunes siempre tienen un máximo de 5 letras
(PR) porque es parte del patrón que debe buscarse (más abajo en la información de fondo)
\D+$ porque intento hacer coincidir una sola letra al final de la cadena

Un pequeño fragmento de antecedentes
Los símbolos de acciones preferidos no están estandarizados, por lo que cada plataforma, intercambio, etc.tiene su propia forma de mostrarlos. Habiendo dicho eso, la mayoría muestra un carácter especial en su nombre, lo que hace que esos tipos sean fáciles de detectar. Los personajes son
[] {'.', '/', '-', ' ', '+'};
Los más complicados tienen todos un patrón similar:
{symbol} PR {0}
{symbol} p {0}
{symbol} P {0}
Donde 0 es cualquier letra A-Z

Aquí hay un conjunto de datos de muestra para los más complicados:

PSAPRZ
PSApA
PSApZ
PSAPA
PSAPZ

Mi expresión regular parece estar funcionando para la primera, ya que estoy buscando específicamente (PR) y haciendo coincidir cualquier carácter de una sola letra al final, pero no puedo por mi vida averiguar cómo detectar también los patrones que terminar en p{0} o P{0} en la misma expresión regular. Dejé por completo de intentar incorporar la búsqueda de los símbolos especiales porque puedo hacer fácilmente un string.Contains en la cadena de destino para cualquiera de esos caracteres. La parte más importante es descubrir estos más complicados.

¿Cómo hago para que mi declaración de expresiones regulares también detecte las coincidencias p {0} y P {0} dentro de la misma declaración de expresiones regulares?

Editar 1 Si sientes curiosidad por la locura de las diferentes posibilidades, incluidas las versiones "fáciles de detectar", toma una palomita de maíz, aquí tienes :)

PSA.PA
PSA.PR.A
PSA/PA
PSAPRA
PSA-A
PSA PRA
PSA.PRA
PSA.PA
PSA+A
PSA/PRA
PSApA
PSAPA
PSA-PA
1
Adrian 4 mar. 2021 a las 21:52

1 respuesta

La mejor respuesta

Esto debería hacerlo:

^[A-Z]{1,5}([Pp]|PR)[A-Z]$

Explicación:

  • ^: ancla al inicio
  • [A-Z]{1,5}: de una a cinco letras mayúsculas
  • ([Pp]|PR): grupo de captura utilizado para: mayúsculas P o minúsculas p o mayúsculas PR
  • [A-Z]: una letra mayúscula
  • $: ancla al final

ACTUALIZAR después de EDITAR 1 en cuestión. Para admitir los formatos extraños con ., /, -, + use esto:

^[A-Z]{1,5}[.\/\s\+\-]?([Pp]|PR\.?)[A-Z]$

Explicación:

  • ^: ancla al inicio
  • [A-Z]{1,5}: de una a cinco letras mayúsculas
  • [.\/\s\+\-]?: carácter único opcional ., /, , +, -
  • ([Pp]|PR\.?): grupo de captura utilizado para: mayúsculas P o minúsculas p, o mayúsculas PR seguido de . opcional
  • [A-Z]: una letra mayúscula
  • $: ancla al final

Nota sobre las anclas: Utilice ^...$ anclas si solo tiene el símbolo de cotización en la cadena. Si tiene texto con un símbolo de acciones en cualquier lugar dentro, use límites de palabras \b...\b en su lugar.

Obtenga más información sobre las expresiones regulares: https://twiki.org/cgi-bin/view/Codev / TWikiPresentation2018x10x14Regex

3
Peter Thoeny 4 mar. 2021 a las 19:19