Удалить английские буквы python

Remove all special characters, punctuation and spaces from string

I need to remove all special characters, punctuation and spaces from a string so that I only have letters and numbers.

19 Answers 19

This can be done without regex:

>>> string = "Special $#! characters spaces 888323" >>> ''.join(e for e in string if e.isalnum()) 'Specialcharactersspaces888323' 
S.isalnum() -> bool Return True if all characters in S are alphanumeric and there is at least one character in S, False otherwise. 

If you insist on using regex, other solutions will do fine. However note that if it can be done without using a regular expression, that’s the best way to go about it.

@DiegoNavarro except that’s not true, I benchmarked both the isalnum() and regex versions, and the regex one is 50-75% faster

Tried this in Python3 — it accepts unicode chars so it’s useless to me. Try string = «B223323\§§§$3\u445454» as an example. The result? ‘B2233233䑔54’

Additionally: «For 8-bit strings, this method is locale-dependent.»! Thus the regex alternative is strictly better!

Here is a regex to match a string of characters that are not a letters or numbers:

Here is the Python command to do a regex substitution:

I guess this doesn’t work with modified character in other languages, like á, ö, ñ, etc. Am I right? If so, how would it be the regex for it?

just add the special characters of that particular language. For example, to use for german text, re.sub(‘[^A-Za-z0-9 ,.-_\’äöüÄÖÜß]+’, », sample_text) expression can be used.

import re cleanString = re.sub('\W+','', string ) 

If you want spaces between words and numbers substitute » with ‘ ‘

Depends on the context — underscore is very useful for filenames and other identifiers, to the point that I don’t treat it as a special character but rather a sanitised space.I generally use this method myself.

r’\W+’ — slightly off topic (and very pedantic) but I suggest a habit that all regex patterns be raw strings

TLDR

I timed the provided answers.

is typically 3x faster than the next fastest provided top answer.

Caution should be taken when using this option. Some special characters (e.g. ø) may not be striped using this method.

After seeing this, I was interested in expanding on the provided answers by finding out which executes in the least amount of time, so I went through and checked some of the proposed answers with timeit against two of the example strings:

  • string1 = ‘Special $#! characters spaces 888323’
  • string2 = ‘how much for the maple syrup? $20.99? That s ridiculous. ‘

Example 1

'.join(e for e in string if e.isalnum()) 

Example 2

import re re.sub('[^A-Za-z0-9]+', '', string) 

Example 3

The above results are a product of the lowest returned result from an average of: repeat(3, 2000000)

Example 3 can be 3x faster than Example 1.

@kkurian If you read the beginning of my answer, this is merely a comparison of the previously proposed solutions above. You might want to comment on the originating answer. stackoverflow.com/a/25183802/2560922

Python 2.*

I think just filter(str.isalnum, string) works

In [20]: filter(str.isalnum, 'string with special chars like !,#$% etcs.') Out[20]: 'stringwithspecialcharslikeetcs' 

Python 3.*

In Python3, filter( ) function would return an itertable object (instead of string unlike in above). One has to join back to get a string from itertable:

''.join(filter(str.isalnum, string)) 

or to pass list in join use (not sure but can be fast a bit)

''.join([*filter(str.isalnum, string)]) 

note: unpacking in [*args] valid from Python >= 3.5

@Alexey correct, In python3 map , filter , and reduce returns itertable object instead. Still in Python3+ I will prefer ».join(filter(str.isalnum, string)) (or to pass list in join use ».join([*filter(str.isalnum, string)]) ) over accepted answer.

I’m not certain ».join(filter(str.isalnum, string)) is an improvement on filter(str.isalnum, string) , at least to read. Is this really the Pythreenic (yeah, you can use that) way to do this?

@TheProletariat The point is just filter(str.isalnum, string) do not return string in Python3 as filter( ) in Python-3 returns iterator rather than argument type unlike Python-2.+

@GrijeshChauhan, I think you should update your answer to include both your Python2 and Python3 recommendations.

#!/usr/bin/python import re strs = "how much for the maple syrup? $20.99? That's ricidulous. " print strs nstr = re.sub(r'[?|$|.|!]',r'',strs) print nstr nestr = re.sub(r'[^a-zA-Z0-9 ]',r'',nstr) print nestr 

you can add more special character and that will be replaced by » means nothing i.e they will be removed.

Differently than everyone else did using regex, I would try to exclude every character that is not what I want, instead of enumerating explicitly what I don’t want.

For example, if I want only characters from ‘a to z’ (upper and lower case) and numbers, I would exclude everything else:

import re s = re.sub(r"[^a-zA-Z0-9]","",s) 

This means «substitute every character that is not a number, or a character in the range ‘a to z’ or ‘A to Z’ with an empty string».

In fact, if you insert the special character ^ at the first place of your regex, you will get the negation.

Extra tip: if you also need to lowercase the result, you can make the regex even faster and easier, as long as you won’t find any uppercase now.

import re s = re.sub(r"[^a-z0-9]","",s.lower()) 

Источник

Исключить латинские символы из строки

Добрый день, форумчане, сегодня появилась задача убрать все латинские символы из строки, а также знак «/».
Поискал в интернете, ничего не нашел простого или встроенного.

У меня есть список товаров в таком виде:

Название на русском языке / Название на английском языке

def expectlatin(mystring): for i in range(65, 91): mystring = mystring.replace(f"", "") for i in range(97, 122): mystring = mystring.replace(f"", "") mystring = mystring.replace("/", "").strip() return mystring print(expectlatin("abcqrsdваbifrкщгшпугка"))

возвращает «вакщгшпугка», работает, как мне надо, но насколько правильно и как легче решить мою задачу, а главное правильно.

Добавлено через 41 секунду
Стрипом убираю все лишние пробелы

Исключить из строки или списка все цифровые символы, а так же (h,e,s,o,y,a,m)
5. Дана строка или список N символов, введено пользователем, исключить из строки или списка все.

Как исключить латинские буквы из строки.
Доброй ночи ! Ребята подскажите как исключить латинские буквы из строки. Пробывал функцию strtok.

Дано текстовый файл, в котором встречаются как российские, так и латинские буквы. Исключить из этого файла все латинские
Дано текстовый файл, в котором встречаются как российские, так и латинские буквы. Исключить из.

Упорядочить символы строки B в алфавитном порядке и удалить латинские буквы из строки A
"Даны строки A и B. Если в A есть латинские буквы, а в B нет повторяющихся символов, то упорядочить.

from re import sub def expectlatin(mystring): return sub(r'[a-zA-Z\s]+', '', mystring) # так же удаляет лишние пробелы print(expectlatin(' abcqrsdваbifrкщгшпугка')) # вакщгшпугка
from string import ascii_letters as al def expectlatin(mystring): return [i for i in mystring if i not in al] print(*expectlatin('abcqrsdваbifrкщгшпугка'), sep='') # вакщгшпугка

ЦитатаСообщение от Пифагор Посмотреть сообщение

ЦитатаСообщение от GmDio Посмотреть сообщение

def expectlatin(mystring): return [i for i in mystring if i not in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'] print(*expectlatin('abcqrsdваbifrкщгшпугка'), sep='') # вакщгшпугка

ЦитатаСообщение от Пифагор Посмотреть сообщение

def expectlatin(mystring): return [i for i in mystring if i not in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'] print(*expectlatin('abcqrsdваbifrкщгшпугка'), sep='') # вакщгшпугка

Я только учусь, короткие конструкции мне менее понятны, но я знаю, что надо к ним стремиться, могу попросить сделать полную конструкцию для лучшего понимания?

ЦитатаСообщение от GmDio Посмотреть сообщение

Не совсем понял. Вам надо объяснить, как ЭТО работает?
[i for i in mystring if i not in ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’]

Данный код пробегает по mystring и проверяет, входит ли символ в последовательность abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ , она же — ascii_letters из модуля string .

Пифагор, решение то хорошее но представь нам нужно убирать китайские символы а их 5000 универсальней через код ASCII

return [i for i in mystring if not 97  ord(i.lower())  122 ]

ЦитатаСообщение от Пифагор Посмотреть сообщение

ну не сокращенная конструкция

for i in mystring if i not in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' .

Semen-Semenich, согласен. Просто в ТЗ фигурировали исключительно латинские символы. С китайскими ситуёвина была бы другая

Добавлено через 3 минуты

ЦитатаСообщение от GmDio Посмотреть сообщение

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

Добавлено через 3 минуты
Кстати, полюбопытствуйте синтаксис тернарного оператора. Если поймете его сейчас(в начале пути), то можете себя поздравить.

Semen-Semenich, точно знаю ты распишешь эту конструкцию для меня в более привычный мне вид

Добавлено через 3 минуты

ЦитатаСообщение от Пифагор Посмотреть сообщение

Я за неделю узнал, что такое Python, какие в нем основные функции, узнал что такое ООП, классы, создал свою игру, создал свой парсер, создал свою многопользовательскую игру и т.д. Моя просьба расписать конструкцию абсолютно нормальная, чтобы мне прочитать сокращенную конструкцию, мне надо понимать как это все устроенно в обычной.

Не сравнивайте свои знания со знаниями других людей, просто или помогайте, или не помогайте =)

GmDio, если Вы воспринимаете обычные советы, как унизительную критику, то может лучше и вовсе не спрашивать советов?

ЦитатаСообщение от GmDio Посмотреть сообщение

Я за неделю узнал, что такое Python, какие в нем основные функции, узнал что такое ООП, классы, создал свою игру, создал свой парсер, создал свою многопользовательскую игру и т.д

Интересно, как, не зная(и не понимая) основ(!), Вы сумели узнать весь(!) язык.

Добавлено через 1 минуту
Да еще и за неделю

ЦитатаСообщение от Пифагор Посмотреть сообщение

Добавлено через 3 минуты
1) что такое Python
2) какие в нем основные функции
3) узнал что такое ООП
4) узнал, что такое классы
5) создал свою игру (простая игра угадай число, с различными дополнениями)
6) создал свой парсер (написал парсер, который показывает мне самое выгодное предложение со страницы магазина кошачих кормов)
7) создал свою многопользовательскую игру

Ни слова про весь(!) Python

Добавлено через 1 минуту
Поэтому на вашем месте было бы проще новичку расписать, что и как или так и написать: «Мне лень». Но я не вашем месте.

ЦитатаСообщение от Пифагор Посмотреть сообщение

Это и есть язык. А модули и приблуды — по необходимости. В общем, Romae, esse Romanum, а не воротите нос.

ЦитатаСообщение от Пифагор Посмотреть сообщение

ЦитатаСообщение от GmDio Посмотреть сообщение

Я за неделю узнал, что такое Python, какие в нем основные функции, узнал что такое ООП, классы, создал свою игру, создал свой парсер

вы гений. я с 2016 года изучаю и знаю наверно процентов 10% питона. без обид но вот такое поверхностное знание потом приводит к массе вопросов

ЦитатаСообщение от GmDio Посмотреть сообщение

это не короткие конструкции а обычный цикл в генераторе с условием отбора элементов сразу собранный в список

def expectlatin(mystring): lst = [] for i in mystring: if i not in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ': lst.append(i) return lst

ЦитатаСообщение от Semen-Semenich Посмотреть сообщение

вы гений. я с 2016 года изучаю и знаю наверно процентов 10% питона. без обид но вот такое поверхностное знание потом приводит к массе вопросов

Что с вами со всеми не так? Я не писал, что хорошо знаю Python, наоборот я несколько раз замечал, что я его только начал учить. Для меня раньше Python был просто языком программирования, теперь я знаю, что это такое немного больше.

Я нигде и никогда не хвалился своими знаниями. Если вы знаете десять процентов, то я тогда тысячные доли процента, если не меньше.

Я за неделю узнал, что такое Python, какие в нем основные функции, узнал что такое ООП, классы, создал свою игру, создал свой парсер

Если внимательно и без эмоций прочитать, то тут черным по #F6F6F6 написано, что мои знания заканчиваются на списке выше.

В противном случае я бы не задавал вопросы.

Добавлено через 1 минуту
За шесть лет вы стали лучше читать код, чем простой текст.

Добавлено через 1 минуту
Вы заходите в раздел Python для новичков, тут всем нужна помощь и советы, профессионалы и бывалые тут в создании тем не нуждаются.

P.S.: Если вы где-то видите мое сообщение о том, что я Гуру Python, процитируйте мне его пожалуйста.

Добавлено через 1 минуту
У меня ощущение, что некоторые сюда самоутвердиться приходят, а не помогать новичкам.

Добавлено через 7 минут
А по поводу поверхностных знаний:

На автомобиле человек сперва учит теорию, потом начинается практика. Сперва троганье с места, контроль сцепления, управление автомобилем и т.д. Таким образом аккуратно, набирая опыт появляются навыки. Никто сперва годами не оттачивал троганье с места, потом еще несколько месяцев эстакаду, торможение и т.д.

Так и тут, сперва надо получить поверхностные знания хотя бы для того, чтобы понимать, что оттачивать.

Источник

Читайте также:  Error java lang arrayindexoutofboundsexception java
Оцените статью