Tengo dos expresiones regulares que funcionan por separado: ^[\x20-\x7E]*$ y \S(.*\S
Pero no entiendo cómo combinar los dos para que coincida con ambos.
(^[\x20-\x7E]*$)*?(\S(.*\S)?) pero no funcionó.
Usé esto en la etiqueta de entrada con pattern="(^[\x20-\x7E]*$)*?(\S(.*\S)?)"
Combine las dos expresiones regulares con el símbolo de tubería. Es lo mismo que el OR lógico. Aquí hay un fragmento de código que demuestra cómo usar esto.
import re regex_list = ["^[\x20-\x7E]$", "\S(.*\S)"] regex = '|'.join(regex_list) print(regex) # ^[ -~]$|\S(.*\S) print(re.search(regex, "C")) #matches first pattern print(re.search(regex, "CAT CAT")) #matches second pattern print(re.search(regex, " 3 ")) #matches neither patternUna forma de hacer esto es usar límites de palabras ( \b ) en lugar del ancla \S :
^\b[\x20-\x7E]*\b$ Esto coincidiría con su caso de prueba dado Priya@ #432 , pero no coincidiría con priya##23á o Priya@ #432 . Puede ver un ejemplo de esta expresión regular en acción en Regex101 aquí .