Estoy tratando de obtener una expresión regular para recuperar el código alfanumérico OTP (longitud del código es decir, tal vez dinámico según la elección del usuario) y debe contener al menos un dígito.
He intentado el siguiente expresión regular: "[a-zA-Z] . [0-9] [a-zA-Z] "
Pero si un carácter especial es que hay en el código debería resultar nulo en lugar recupera los personajes antes y después de que el carácter especial que no se desea.
Algunos mensajes que contiene OTP-muestras en las que se desea la expresión regular para trabajar con éxito:
- OTP es **** de TXN de INR 78,90.
- **** es la contraseña de una sola vez.
- Hola, Su OTP es ****.
Ejemplos de alfanumérico OTP con al menos un dígito:
- 78784
- aZ837
- 987Ny
- 19hd35
- fc82pl
Sería un poco difícil, tal vez esta expresión podría trabajar con una i
bandera:
[a-z0-9]*\d[a-z0-9]*
o con límites de las palabras:
(?<=\b)[a-z0-9]*\d[a-z0-9]*(?=\b)
Prueba
import java.util.regex.Matcher;
import java.util.regex.Pattern;
final String regex = "[a-z0-9]*\\d[a-z0-9]*";
final String string = "78784\n"
+ "aZ837\n"
+ "987Ny\n"
+ "19hd35\n"
+ "fc82pl";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
La expresión se explica en el panel superior derecha de regex101.com , si desea explorar / Simplificar / modificarlo, y en este enlace , se puede ver cómo iba a coincidir en contra de algunas entradas de ejemplo, si te gusta.