2016-10-16 1 views
1

Мне интересно, как я могу реализовать проверку строки, где я хочу убедиться, что первый (& последний) символ строки является буквенно-цифровым. Я знаю о isalnum, но как это использовать для реализации этой проверки/замены?Python - первый и последний символ в строке должен быть буквенным числом, иначе удалить

Итак, у меня есть строка, например, так:

st="-jkkujkl-ghjkjhkj*" 

, и я хотел бы вернуться:

st="jkkujkl-ghjkjhkj" 

спасибо ..

ответ

5

Хотя не совсем то, что вы хотите, но с использованием str.strip должны служить вашей цели

import string 

st.strip(string.punctuation) 
Out[174]: 'jkkujkl-ghjkjhkj' 
+1

@ Abhijit: Удивительный! Спасибо за ОЧЕНЬ питоновское и регулярное выражение (меньше)! – AJW

2

Вы можете использовать регулярные выражения, как показано ниже:

import re 
# \W is a set of all special chars, and also include '_' 
# If you have elements in the set [\W_] at start and end, replace with '' 
p = re.compile(r'^[\W_]+|[\W_]+$') 
st="-jkkujkl-ghjkjhkj*" 
print p.subn('', st)[0] 

Выход:jkkujkl-ghjkjhkj

Edit:

Если специальные символы в наборе:. "# $% & \ '() * +, -/:; < =>? @ [\]^_ `{|} ~

@ Ответ Abhijit намного проще и чище.

Если вы не уверены, то эта версия регулярного выражения лучше.

+0

я использовал что-то подобное, но Вы можете добавить + или * для повторного выражения для того, чтобы удалить несколько вхождений не алфавитных символов. – Fejs

+0

Звучит неплохо. Спасибо, я отредактирую регулярное выражение. – sisanared

0

Вы можете использовать регулярное выражение.

Нечто подобное может работать;

\w.+?\w 

Однако я не знаю, как это сделать матч регулярного выражения в питон ..

0

подсказку 1:ord() может Covert письмо на символьный номер

Подсказка 2 : альфа фрахтователей находятся между 97 и 122 в ord()

намек 3:st[0] возвращает первую букву в строке st[-1] возвращает последний

1

Вы можете использовать следующие два выражения:

st = re.sub('^\W*', '', st) 
st = re.sub('\W*$', '', st) 

Это лишит все не альфа символы начала и конца строка, а не только первая.

+0

лучше использовать '+' хотя –

+0

Можете ли вы объяснить, почему? – Fejs

+1

@Fejs^\ W * будет соответствовать строке 'foo', поэтому его пустой цикл замены. Вы можете попробовать выполнить 'st = re.sub ('^ \ W *', '-', st)' в строке значения 'foo', и вы увидите' '' на передней панели – sisanared

0

Точный ответ на ваш вопрос может быть следующим:

def stringCheck(astring): 
    firstChar = astring[0] if astring[0].isalnum() else '' 
    lastChar = astring[-1] if astring[-1].isalnum() else '' 
    return firstChar + astring[1:-1] + lastChar 
Смежные вопросы