¿Cómo verificar símbolos especiales como !?,(). en las palabras que terminan? Por ejemplo, Hello??? o Hello,, o Hello! devuelve True pero H!??llo o Hel,lo devuelve False.

Sé cómo verificar el único último símbolo de cadena, pero ¿cómo verificar si dos o más últimos caracteres son símbolos?

-1
AlTs 30 oct. 2017 a las 01:01

5 respuestas

La mejor respuesta

Puede que tenga que usar expresiones regulares para esto.

import re

def checkword(word):
    m = re.match("\w+[!?,().]+$", word)
    if m is not None:
        return True
    return False

Esa expresión regular es:

\w+          # one or more word characters (a-zA-z)
[!?,().]+    # one or more of the characters inside the brackets
             #   (this is called a character class)
$            # assert end of string

El uso de re.match obliga a que la coincidencia comience al comienzo de la cadena, o de lo contrario tendríamos que usar ^ antes de la expresión regular.

3
Adam Smith 29 oct. 2017 a las 22:16

Si desea obtener un recuento de los caracteres 'especiales' al final de una cadena dada.

special = '!?,().'
s = 'Hello???'

count = 0
for c in s[::-1]:
    if c in special:
        count += 1
    else:
        break

print("Found {} special characters at the end of the string.".format(count))
0
Iosif Serafeimidis 29 oct. 2017 a las 22:23

Puedes usar re.findall:

import re
s = "Hello???"
if re.findall('\W+$', s):
   pass
0
Ajax1234 29 oct. 2017 a las 22:36

Podrías probar esto.

string="gffrwr."
print(string[-1] in "!?,().")
0
whackamadoodle3000 29 oct. 2017 a las 22:36

Puedes probar algo como esto:

word = "Hello!"

def checkSym(word):
    return word[-1] in "!?,()."

print(checkSym(word))

El resultado es:

True

Intente dar diferentes cadenas como entrada y verifique los resultados.

En caso de que desee encontrar cada símbolo desde el final de la cadena, puede usar:

def symbolCount(word):

    i = len(word)-1
    c = 0
    while word[i] in "!?,().":
        c = c + 1
        i = i - 1

    return c

Probándolo con word = "Hello!?.":

print(symbolCount(word))

El resultado es:

3
1
Vasilis G. 29 oct. 2017 a las 22:35