Как удалить все символы из строки кроме цифр и точек? [закрыт]
Если уж оставлять и запятую (где Евро), то я бы предложил так:
import re def func(x): return (re.findall(r'-[0-9.,]+|[0-9.,]+', x)) a = "¥ 362.25 52,50€ 435 uhdja-43-7.3 47432--38 fhhwref " print (func(a)) #a = ['362.25', '52,50', '435', '-43', '-7.3', '47432', '-38']
Отслеживать
ответ дан 28 авг 2022 в 16:46
16 3 3 бронзовых знака
Я проанализировал данную задачу и немного интерпретировал, мой код позволяет найти все числа в строке, в том числе отрицательные и вещественные, таким образом он отвечает и на ваш запрос
a = input() # a = "¥ 362.25 52,50€ 435 uhdja-43-7.3 47432--38 fhhwref " def isnum(num): key = "1234567890" num = str(num) if num in key and num != "": return True return False def find_num(text, float_sep=None, unary_sing=None): text += " " # Увеличивает длину исходной строки на 1 if unary_sing is None: # Установка стандартных значений unary_sing = ["-"] if float_sep is None: float_sep = [",", "."] nums = [] # Объявление списка для чисел number = "" last_sym = "" flag_float = False flag_unary = False for sym in text: if isnum(sym): # Проверка символа на число number += last_sym last_sym = sym elif sym in float_sep and \ not flag_float and \ isnum(last_sym): # Проверка на вхождение в список, проверка на единоличность, проверка на число прошлого символа number += last_sym last_sym = sym flag_float = True elif sym in unary_sing and \ not flag_unary and\ number == "": # Проверка на вхождение в список, проверка на единоличность, проверка на первое число last_sym = sym flag_unary = True elif number: # Если не одно условие выше не выполнилось, то проверяет было ли найдено хоть что-то if isnum(last_sym): # Проверяет последний символ на число, помогает избежать потери последнего символа number += last_sym nums.append(number) number = "" # Обнуление всех параметров flag_float = False flag_unary = False last_sym = "" if sym in unary_sing: # Частный случай если символ начинает новое число last_sym = sym return nums g = find_num(a) print(g) # При a = "¥ 362.25 52,50€ 435 uhdja-43-7.3 47432--38 fhhwref " # Выведет: ['362.25', '52,50', '435', '-43', '-7.3', '47432', '-38']
Как удалить все символы в строке python
Сначала выведите третий символ этой строки.
Во второй строке выведите предпоследний символ этой строки.
В третьей строке выведите первые пять символов этой строки.
В четвертой строке выведите всю строку, кроме последних двух символов.
В пятой строке выведите все символы с четными индексами (считая, что индексация начинается с 0, поэтому символы выводятся начиная с первого).
В шестой строке выведите все символы с нечетными индексами, то есть начиная со второго символа строки.
В седьмой строке выведите все символы в обратном порядке.
В восьмой строке выведите все символы строки через один в обратном порядке, начиная с последнего.
Абракадабра
р
р
Абрак
Абракадаб
Аркдба
бааар
арбадакарбА
абдкрА
11
B: В обратном порядке
Дана строка. Выведите её символы в обратном порядке, по одном символу в строке.
Python
n
o
h
t
y
P
C: Количество слов
Hello world
D: Замена подстроки
one+one=2
E: Удаление символа
Bilbo.Baggins@bagend.hobbiton.shire.me
Bilbo.Bagginsbagend.hobbiton.shire.me
F: Две половинки
Дана строка. Разрежьте ее на две равные части (если длина строки — четная, а если длина строки нечетная, то длина первой части должна быть на один символ больше). Переставьте эти две части местами.
Результат запишите в отдельную переменную и выведите на экран следующим образом: print(«*» + s + «*»)
Решение, в котором ответ выводится по-другому, приниматься не будет.
Hello
*loHel*
G: Переставить два слова
Дана строка, состоящая ровно из двух слов, разделенных пробелом. Переставьте эти слова местами.
При решении этой задачи нельзя пользоваться циклами и инструкцией if .
Hello world
*world Hello*
H: Дробь
Дана строка, в которой записана рациональная дробь в виде m/n , где m и n — целые неотрицательные числа, n не равно 0. Вычислите значение этой дроби и выведите его в виде действительного числа.
179/57
3.1403508771929824
I: Удаление слова
Текст состоит из слов, разделённых пробелами. В тексте как минимум три слова. Удалите из текста второе слово.
Решение выведите так же, как в задаче «Две половинки».
In the hole in the ground there lived a hobbit
*In hole in the ground there lived a hobbit*
J: Повторение слова
Текст состоит из слов, разделённых пробелами. В тексте как минимум два слова. Продублируйте второе слово в тексте.
В этой задаче нельзя использовать методы count и replace. Также желательно использовать метод find с двумя параметрами, вместо вызова метода find к срезу.
In the hole in the ground there lived a hobbit
*In the the hole in the ground there lived a hobbit*
Hello world
*Hello world world*
K: Разворот слова
Текст состоит из слов, разделённых пробелами. В тексте как минимум одно слово. Переставьте буквы второго слова (если оно есть) в обратном порядке.
Решение выведите так же, как в задаче «Две половинки».
In the hole in the ground there lived a hobbit
*In eht hole in the ground there lived a hobbit*
Hello
*Hello*
L: Футбольный матч
На табло стадиона в конце игры горит надпись:
Название 1-Название 2 A:B
где Название 1 и Название 2 — названия двух команд, а A:B — счёт матча.
Определите, какая команда победила.
Названия команд могут содержать любые символы (буквы, цифры, знаки), кроме «-» и «:». Символы «-» и «:» содержатся в строке ровно по одному разу.
Программа должна вывести название победившей команды, а если была ничья, то слово draw .
Арсенал (Тула)-Спартак (Москва) 3:0
*Арсенал (Тула)*
M: Вставка символов
Дана строка. Получите новую строку, вставив между каждыми соседними символами исходной строки символ «.». Выведите полученную строку.
В этой задаче можно использовать цикл, но можно обойтись и без него (нужно догадаться самому).
Python
*P.y.t.h.o.n*
N: Удалить каждый третий символ
Дана строка. Удалите из нее все символы, чьи индексы делятся на 3.
Решение выведите так же, как в задаче «Две половинки».
Python
*yton*
O: Метод бутерброда
Секретное агентство решило для шифрования переписки своих сотрудников использовать «метод бутерброда». Сначала буквы слова нумеруются в таком порядке: первая буква получает номер 1, последняя буква — номер 2, вторая – номер 3, предпоследняя – номер 4, потом третья … и так для всех букв (см. рисунок). Затем все буквы записываются в шифр в порядке своих номеров. Например, слово «sandwich» зашифруется в «shacnidw».
К сожалению, программист агентства, написал только программу шифрования и уволился. И теперь агенты не могут понять, что же они написали друг другу. Помогите им.
Вводится слово, зашифрованное методом бутерброда. Выведите расшифрованное слово.
Решение выведите так же, как в задаче «Две половинки».
Решите эту задачу при помощи срезов, не используя циклы.
Aabrrbaacda
*Abracadabra*
P: Скрытие адреса email
Для защиты от ботов, собирающих с web-страниц адреса электронной почты для рассылки спама, используются методы скрытия адреса электронной почты. Рассмотрим самый простой метод скрытия: в адресе электронной почты символы «.» меняются на «(dot)», символ «@» меняется на «(at)».
Дана строка текста, в ней есть один адрес электронной почты (он содержит один символ «@»). В адресе электронной почты (считайте, что адрес — это слово, отделённое пробелами) выполните указанные замены, в остальных местах замены производить не нужно.
Bilbo.Baggins@bagend.hobbiton.shire.me - valid email.
*Bilbo(dot)Baggins(at)bagend(dot)hobbiton(dot)shire(dot)me - valid email.*
Q: Смайлики
Напишите программу, которая посчитает количество смайликов в заданном тексте.
- первым символом является либо ; (точка с запятой) либо : (двоеточие) ровно один раз
- далее может идти символ – (минус) сколько угодно раз (в том числе символ минус может идти ноль раз)
- в конце обязательно идет некоторое количество (не меньше одной) одинаковых скобок из следующего набора: ( , ) , [ , ] .
- внутри смайлика не может встречаться никаких других символов.
Например, нижеприведенные последовательности являются смайликами:
в то время как эти последовательности смайликами не являются (хотя некоторые из них содержат смайлики внутри):
В этой задаче надо будет посчитать количество смайликов, содержащихся в данной строке.
Выведите одно число — количество смайликов, которые встречаются в тексте.
Эту задачу можно решить в одну строчку.
Удаление слова из строки Python по фрагменту или шаблону
Строка — это неизменяемый тип в Python, следовательно для каких то изменений, ее необходимо преобразовать в изменяемый тип, например в список. После необходимых изменений , преобразовать список снова в строку.
# исходная строка >>> line = 'остались строки и перенос слова перекресток переоборудование' # делим строку на слова >>> words = line.split(' ') # фрагмент, по которому будем удалять слова >>> fragment = 'пере' # новый список оставшихся слов >>> new_words = [] >>> for word in words: . if fragment not in word: . new_words.append(word) . >>> new_words # ['остались', 'строки', 'и', 'слова'] # собираем строку используя в качестве разделителя пробел >>> ' '.join(new_words) # 'остались строки и слова
Для удаления или изменения строк по шаблону необходимо использовать регулярные выражения и функцию re.sub() . Например удалим все цифры из строки или оставим только цифры.
# исходная строка >>> line = '156 строк и 13 переносов слов в 10 предложениях' >>> import re # удаление цифр из строки >>> re.sub(r'\d+\s?', '', line).strip() # 'строк и переносов слов в предложениях' # удаление слов из строки >>> re.sub(r'[а-я]+\s?', '', line).strip() # '156 13 10'
Удаление повторов слов в строке.
Для удаления повторов слов в строке так же необходимо воспользоваться регулярными выражениями и модулем re . В частности будем использовать группы с захватом и обратные ссылки регулярного выражения..
# исходная строка >>> line = 'Мама мыла мыла раму' >>> import re >>> re.sub(r'(\b\w+)\s+\1', r'\1', line) # 'Мама мыла раму'
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Преобразование строки в число
- Строку в список, кортеж или множество символов
- Одинарные, двойные и тройные кавычки в строке Python
- Вывод специальных символов в строке Python «как есть»
- Объединение и повторение строк
- Индексирование строк
- Использование срезов строк
- Cрез строки Python от заданного символа/знака до конца строки
- Создание макета для печати базовыми методами строк
- Способы форматирования текстовых строк
- Подсчет повторений слов в тексте, деление строки на список слов
- Удаление слова из строки Python по фрагменту или шаблону
- Удаление пунктуации из строки
- Деление строки по заглавным буквам
- Создание отчетов и писем по шаблонам
Удаление символов из строки
K&R (61-62). Приводится пример функции squeeze , которая удаляет все символы c из строки s .
Ниже представлен полный код программы с использованием этой функции. А также ответ к упражнению 2.4, где предлагается написать функцию, удаляющую из строки s1 все символы, встречающиеся в строке s2 .
Алгоритм удаления символа из строки можно описать так:
- Пока не будет достигнут конец строки,
- если очередной символ строки не равен символу для удаления,
- записать очередной символ по месту индекса j , после этого последний увеличить на единицу.
Другими словами, алгоритм сводится к тому, что символ по индексу i затирается следующим символом, если он совпал с символом для удаления; т.к запись идет по счетчику j , а он увеличивается лишь тогда, когда символы из строки и для удаления не совпадают.
Алгоритм удаления тех символов строки, которые встречаются в другой строке, отличается от предыдущего тем, что нужно по очереди извлекать символы из второй строки и удалять их из первой. Т.е. приведенный выше алгоритм следует вложить в цикл перебора символов второй строки.
Удаление всех символов c из строки
#include #define MAX 100 void squeeze (char s[], int c); main () char str0[MAX]; int i, c; for (i = 0; (c = getchar()) != '\n'; i++) str0[i] = c; str0[i] = '\0'; c = getchar(); squeeze (str0, c); printf("%s\n", str0); > void squeeze (char s[], int c) int i, j; for (i = j = 0; s[i] != '\0'; i++) if (s[i] != c) s[j++] = s[i]; s[j] = '\0'; >
Удаление всех символов, встречающихся в строке s2 , из строки s1
#include #define MAX 100 #define DEL 10 void squeeze (char s[], char s1[]); void written (char s[]); main() char str[MAX]; char str1[DEL]; written (str); written (str1); squeeze (str, str1); printf("%s\n", str); > void written (char s[100]) int i, c; i = 0; while ((c = getchar()) != '\n') s[i] = c; ++i; > s[i] = '\0'; > void squeeze (char s[], char s2[]) int k, i, j; for (k = 0; s2[k] != '\0'; k++) for (i = j = 0; s[i] != '\0'; i++) if (s[i] != s2[k]) s[j++] = s[i]; s[j] = '\0'; > >
Примечание. Во второй программе запись символов в строку выделена в отдельную функцию, т.к. надо записать две строки. Иначе пришлось бы дублировать код.
X Скрыть Наверх
Решение задач на языке C
