2016-05-02 3 views
0

Я хотел бы удалить все точки (кроме точки) с начала и конца строки, но не посередине.Пунктуация полосы с регулярным выражением - python

Например для исходной строки:

@#%%.Hol$a.A.$% 

Я хотел бы получить слово .Hol$a.A. удалены с конца и начала, но не от середины слова.

Другим примером может служить для строки:

@#%%...&Hol$a.A....$% 

В этом случае возвращаемая строка должна быть ..&Hol$a.A...., потому что мы не волнует, если разрешенные символы повторяются.

Идея состоит в том, чтобы удалить все пунктуации (кроме точки) только в начале и в конце слова. Слово определено как \w и/или .

Практическим примером является строка 'Barnes&Nobles'. Для текстового анализа важно признать Barnes&Nobles как единое целое, но без '

Как достичь цели с помощью Regex?

+0

Возможный дубликат [Удалить все специальные символы, знаки препинания и пробелы из строки] (http://stackoverflow.com/questions/5843518/remove-all-special-characters-punctuation-and -spaces-from-string) –

+0

@ LaxmikantGurnalkar: Это не дубликат. – AKS

+2

@ user2288043: Не могли бы вы разместить больше примеров? Только один не очень полезен для покрытия других случаев, которые могут быть. – AKS

ответ

2

Используйте это простое и легко адаптируемое регулярное выражение:

[\w.].*[\w.] 

Это будет точно соответствовать вашему желаемому результату, больше ничего.

  • [\w.] соответствует любому алфавитно-цифровые символы и точка
  • .* соответствует любому символу (кроме символа новой строки обычно)
  • [\w.] спичек любой алфавитно-цифровой характер и точка

Чтобы изменить разделители, просто изменить набор допустимых символов внутри скобок [].

Check this regex out on regex101.com

import re 
data = '@#%%.Hol$a.A.$%' 
pattern = r'[\w.].*[\w.]' 
print(re.search(pattern, data).group(0)) 
# Output: .Hol$a.A. 
+0

Это общий вопрос, учитывая, что пользователь не предоставил много деталей или больше примеров. – AKS

+0

Это работает как очарование .... Количество точек не было важно ... Другим примером может быть строка @ # %% .... Hol $ aA ... $%, в этом случае возвращаемое значение должно быть. ... Hol $ aA ... – user2288043

+0

@ user2288043 Если этот ответ решает вашу проблему, пожалуйста, примите его, нажав кнопку проверки слева. –

1

В зависимости от того, что вы имеете в виду с удаляющей пунктуацию, вы можете адаптировать следующий код:

import re 
res = re.search(r"^[^.]*(.[^.]*.([^.]*.)*?)[^.]*$", "@#%%.Hol$a.A.$%") 
mystr = res.group(1) 

Это лишит все до и после точки в выражении. Предупреждение, вам нужно будет проверить, отличается ли результат от None, если строка не совпадает.

+0

Это работает только в том случае, если строка результата ограничена точками, верно? Для этой работы существует более общее (и более простое) выражение. –

+0

Если есть алфавит перед точкой, это не сработает: '@ # %% a.Hol $ a.A. $%'. – AKS

+0

Да, но на вопрос не хватало деталей. Я предположил, что он хотел снять что-либо перед первой точкой и после последней. Если вы хотите удалить только определенные символы, то регулярное выражение - это не путь. – Richard

 Смежные вопросы

  • Нет связанных вопросов^_^