Итак, у меня есть длинный список строк в одном формате, и я хочу найти последний "." символ в каждом и замените его на ". -". Я пытался использовать rfind, но я не могу правильно использовать его для этого.
Поиск последнего вхождения подстроки в строке, замена этого
24.01.2013
- Возможный дубликат rreplace - Как заменить последнее вхождение выражения в строку? 09.06.2018
Ответы:
1
Это должно сделать это
old_string = "this is going to have a full stop. some written sstuff!"
k = old_string.rfind(".")
new_string = old_string[:k] + ". - " + old_string[k+1:]
24.01.2013
2
Для замены справа:
def replace_right(source, target, replacement, replacements=None):
return replacement.join(source.rsplit(target, replacements))
В использовании:
>>> replace_right("asd.asd.asd.", ".", ". -", 1)
'asd.asd.asd. -'
24.01.2013
replacements=None
кажется мне ошибкой, потому что, если параметр опущен, функция выдаст ошибку (попробовано в Python 2.7). Я бы предложил либо удалить значение по умолчанию, установить для него значение -1 (для неограниченных замен), либо лучше сделать его replacements=1
(что, я думаю, должно быть поведением по умолчанию для этой конкретной функции в соответствии с тем, что хочет ОП). Согласно документам, этот параметр является необязательным, но он должен быть int, если задано. 14.05.2016 ". -".join("asd.asd.asd.".rsplit(".", 1))
. Все, что вы делаете, это выполняете разделение строки справа на 1 вхождение и снова соединяете строку, используя замену. 24.04.2020
3
Я бы использовал регулярное выражение:
import re
new_list = [re.sub(r"\.(?=[^.]*$)", r". - ", s) for s in old_list]
24.01.2013
\.(?=[^.]*$)
24.01.2013
4
Один вкладыш будет:
str=str[::-1].replace(".",".-",1)[::-1]
07.03.2016
.replace
на перевернутой строке. Обе строки, переданные в replace
, также должны быть инвертированы. В противном случае, когда вы перевернете строку во второй раз, буквы, которые вы только что вставили, будут задом наперед. Вы можете использовать это только в том случае, если вы заменяете одну букву на одну букву, и даже тогда я бы не стал вставлять это в ваш код на случай, если кто-то должен будет изменить его в будущем и начнет задаваться вопросом, почему слово пишется sdrawkcab. 13.01.2019
5
Вы можете использовать функцию ниже, которая заменяет первое вхождение слова справа.
def replace_from_right(text: str, original_text: str, new_text: str) -> str:
""" Replace first occurrence of original_text by new_text. """
return text[::-1].replace(original_text[::-1], new_text[::-1], 1)[::-1]
02.08.2019
6
a = "A long string with a . in the middle ending with ."
# если вы хотите найти индекс последнего вхождения любой строки, В нашем случае мы #найдем индекс последнего вхождения с помощью
index = a.rfind("with")
# результат будет 44, так как индекс начинается с 0.
11.01.2019
7
Наивный подход:
a = "A long string with a . in the middle ending with ."
fchar = '.'
rchar = '. -'
a[::-1].replace(fchar, rchar[::-1], 1)[::-1]
Out[2]: 'A long string with a . in the middle ending with . -'
Ответ Адитьи Сихага с одним rfind
:
pos = a.rfind('.')
a[:pos] + '. -' + a[pos+1:]
24.01.2013
a
? 24.01.2013 '. -'
на выходе. 24.01.2013 replace_right
намного лучше) 24.01.2013 Новые материалы
Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..
Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально
Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..
Частный метод Python: улучшение инкапсуляции и безопасности
Введение
Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..
Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования
Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..
Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv)
Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..
Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..
Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..