Как заменить символ в строке
Перейти к содержимому

Как заменить символ в строке

  • автор:

Замена символов в строке

У меня есть строка: «»Start»» . После всех действий над ней, должно получиться: «Start» . Т.е удаляются все символы » , а затем все пары символов » заменяются на » .
Удаляю из нее все символы » :
result.erase(std::remove(result.begin(), result.end(), ‘»‘ ), result.end()); Затем нужно заменить все пары символов » на » :
replace(result.begin(), result.end(), «\’\'», «\»»); Выдает ошибку следующую ошибку:

tools/data_parser.cpp: In function ‘int main(int, const char**)’: tools/data_parser.cpp:21:52: error: no matching function for call to ‘replace(std::__cxx11::basic_string::iterator, std::__cxx11::basic_string::iterator, const char [3], const char [2])’ replace(result.begin(), result.end(), "\'\'", "\""); ^ In file included from /usr/include/c++/5/algorithm:62:0, from tools/data_parser.cpp:7: /usr/include/c++/5/bits/stl_algo.h:4233:5: note: candidate: template void std::replace(_FIter, _FIter, const _Tp&, const _Tp&) replace(_ForwardIterator __first, _ForwardIterator __last, ^ /usr/include/c++/5/bits/stl_algo.h:4233:5: note: template argument deduction/substitution failed: tools/data_parser.cpp:21:52: note: deduced conflicting types for parameter ‘const _Tp’ (‘char [3]’ and ‘char [2]’) replace(result.begin(), result.end(), "\'\'", "\""); 

Я так понимаю, что std::replace заменяет только один символ на другой. Как заменить пару символов? Компилирую так: g++-5 -std=c++11 cfg_parser.cpp -o cfg_parser

Отслеживать
задан 13 июл 2015 в 10:50
6,651 6 6 золотых знаков 30 30 серебряных знаков 53 53 бронзовых знака

Позвольте поинтересоваться: если уж вы пишете на C++, зачем вам ручное распределение памяти с const char * и связанные с ним проблемы?

String.prototype.replace()

Метод replace() возвращает новую строку с некоторыми или всеми сопоставлениями с шаблоном, заменёнными на заменитель. Шаблон может быть строкой или регулярным выражением, а заменитель может быть строкой или функцией, вызываемой при каждом сопоставлении.

Синтаксис

str.replace(regexp|substr, newSubStr|function[, flags])

Параметры

Объект регулярного выражения RegExp . Сопоставление заменяется возвращаемым значением второго параметра.

Строка, заменяемая на newSubStr . Обратите внимание, будет заменено только первое вхождение искомой строки.

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

Функция, вызываемая для создания новой подстроки (помещаемой вместо подстроки из первого параметра). Аргументы, передаваемые функции, описаны ниже в разделе Передача функции в качестве второго параметра.

Обратите внимание: аргумент flags не работает в ядре v8 (движок JavaScript в Chrome и NodeJs). Строка, задающая комбинацию флагов регулярного выражения. Параметр flags в методе String.prototype.replace() является нестандартным расширением. Вместо использования этого параметра используйте объект RegExp с соответствующими флагами. Значение этого параметра, если он используется, должно быть строкой, состоящей из одного или более следующих символов, следующим образом влияющих на обработку регулярного выражения:

сопоставление по нескольким строкам

«липкий» поиск, сопоставление начинается с текущей позиции в строке

Возвращаемое значение

Новая строка с некоторыми или всеми сопоставлениями шаблона, заменёнными на заменитель.

Описание

Этот метод не изменяет объект String , на котором он вызывается. Он просто возвращает новую строку.

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

Передача строки в качестве второго параметра

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

Шаблон Замена
$$ Вставляет символ доллара «$».
$& Вставляет сопоставившуюся подстроку.
$` Вставляет часть строки, предшествующую сопоставившейся подстроке.
$’ Вставляет часть строки, следующую за сопоставившейся подстрокой.
$n или $nn Символы n или nn являются десятичными цифрами, вставляет n-ную сопоставившуюся подгруппу из объекта RegExp в первом параметре.

Передача функции в качестве второго параметра

В качестве второго параметра вы можете передать функцию. В этом случае функция будет выполнена после произошедшего сопоставления. Результат вызова функции (её возвращаемое значение) будет использоваться в качестве строки замены (обратите внимание: описанные выше специальные шаблоны замены в этом случае не применяются). Обратите внимание, что функция будет вызвана несколько раз для каждого полного сопоставления, если регулярное выражение в первом параметре является глобальным.

Функция принимает следующие аргументы:

Возможное имя Получаемое значение
match Сопоставившаяся подстрока (соответствует шаблону замены $& , описанному выше).
p1, p2, . n-ная сопоставившаяся подгруппа из объекта RegExp в первом параметре метода replace() (соответствует шаблонам замены $1 , $2 и так далее, описанным выше). Например, если в качестве шаблона передано регулярное выражение /(\a+)(\b+)/ , параметр p1 будет значение сопоставления с подгруппой \a+ , а параметр p2 — с подгруппой \b+ .
offset Смещение сопоставившейся подстроки внутри всей рассматриваемой строки (например, если вся строка равна ‘abcd’ , а сопоставившаяся подстрока равна ‘bc’ , то этот аргумент будет равен 1).
string Вся рассматриваемая строка.

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

Следующий пример установит переменную newString в значение ‘abc — 12345 — #$*%’ :

function replacer(match, p1, p2, p3, offset, string)  // p1 - не цифры, p2 - цифры, p3 - не буквы и не цифры return [p1, p2, p3].join(" - "); > var newString = "abc12345#$*%".replace(/([^\d]*)(\d*)([^\w]*)/, replacer); 

Примеры

Пример: использование флагов global и ignore с методом replace()

В следующем примере регулярное выражение включает флаги для глобального поиска и игнорирования регистра, которые позволяют методу replace() заменить все вхождения слова «яблоки» в строке на слово «апельсины».

var re = /яблоки/gi; var str = "Яблоки круглые и яблоки сочные."; var newstr = str.replace(re, "апельсины"); console.log(newstr); // апельсины круглые и апельсины сочные. 

Пример: передача регулярного выражения в метод replace()

В следующем примере в метод replace() передаётся регулярное выражение вместе с флагом игнорирования регистра.

// Ночь перед Рождеством, Xmas - сокращение для Christmas var str = "Twas the night before Xmas. "; var newstr = str.replace(/xmas/i, "Christmas"); console.log(newstr); // Twas the night before Christmas. 

Пример выведет строку ‘Twas the night before Christmas. ‘

Пример: смена местами слов в строке

Следующий скрипт меняет местами слова в строке. В качестве текста замены он использует шаблоны замены $1 и $2 .

var re = /([А-ЯЁа-яё]+)\s([А-ЯЁа-яё]+)/; var str = "Джон Смит"; var newstr = str.replace(re, "$2, $1"); console.log(newstr); // Смит, Джон 

Пример выведет строку ‘Смит, Джон’.

Пример: использование функции для изменения сопоставившихся символов

В этом примере все входящие в строку (латинские) буквы в верхнем регистре преобразуются в нижний регистр, а перед самой буквой вставляется дефис. Здесь важно то, что прежде чем элемент вставится в качестве замены, над ним нужно провести дополнительные преобразования.

Функция замены своим параметром принимает сопоставившийся кусок и перед возвратом использует его для преобразования регистра и соединения с дефисом.

function styleHyphenFormat(propertyName)  function upperToHyphenLower(match)  return "-" + match.toLowerCase(); > return propertyName.replace(/[A-Z]/g, upperToHyphenLower); > 

Вызов styleHyphenFormat(‘borderTop’) вернёт строку ‘border-top’.

Поскольку мы хотим провести дополнительные преобразования результата сопоставления до того, как будет использована окончательная подстановка, мы должны использовать функцию. Это заставляет нас принудительно вычислить сопоставление перед использование метода toLowerCase() . Если бы мы попытались использовать сопоставление без функции, метод toLowerCase() не сработал бы.

var newString = propertyName.replace(/[A-Z]/g, "-" + "$&".toLowerCase()); // не работает 

Происходит это потому, что сначала часть ‘$&’.toLowerCase() вычисляется в строковый литерал (результат по-прежнему равен ‘$&’ ), а только потом его символы используются в качестве шаблона.

Пример: замена градусов по Фаренгейту на эквивалент в градусах по Цельсию

В следующем примере градусы по Фаренгейту заменяются на эквивалентные градусы по Цельсию. Градусы по Фаренгейту должны быть числом, оканчивающимся на букву F. Функция возвращает количество градусов по Цельсию, оканчивающиеся на букву C. Например, если входное число равняется 212F, функция вернёт 100C. Если число равняется 0F, функция вернёт -17.77777777777778C.

Регулярное выражение test сопоставляется с любым числом, оканчивающимся на букву F. Количество градусов по Фаренгейту передаётся в функцию через её второй параметр, p1 . Функция переводит градусы по Фаренгейту, переданные в виде строки в функцию code>f2c(), в градусы по Цельсию. Затем функция f2c() возвращает количество градусов по Цельсию. Эта функция работает примерно так же, как и флаг s///e в Perl.

function f2c(x)  function convert(str, p1, offset, s)  return ((p1 - 32) * 5) / 9 + "C"; > var s = String(x); var test = /(\d+(?:\.\d*)?)F\b/g; return s.replace(test, convert); > 

Пример: использование функции вместе с регулярным выражением для избавления от цикла for

Следующий пример принимает строку шаблона и преобразует её в массив объектов.

Входные данные:

Строка, состоящая из символов x , — и _

x-x_ x---x---x---x--- x-xxx-xx-x- x_x_x___x___x___

Выходные данные:

Массив объектов. Символ ‘x’ означает состояние ‘on’ , символ ‘-‘ (дефис) означает состояние ‘off’ , а символ ‘_’ (нижнее подчёркивание) означает продолжительность состояния ‘on’ .

[  on: true, length: 1 >,  on: false, length: 1 >,  on: true, length: 2 > . ] 

Код:

var str = "x-x_"; var retArr = []; str.replace(/(x_*)|(-)/g, function (match, p1, p2)  if (p1)  retArr.push( on: true, length: p1.length >); > if (p2)  retArr.push( on: false, length: 1 >); > >); console.log(retArr); 

Этот код сгенерирует массив из трёх объектов в описанном формате без использования цикла for .

Спецификации

Specification
ECMAScript Language Specification
# sec-string.prototype.replace

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также

  • String.prototype.match()
  • RegExp.prototype.exec()
  • RegExp.prototype.test()

Как заменить символ в строке Python

Обложка к статье

Замена символов в строках является одной из распространенных операций при работе с текстовыми данными в Python. Эта операция может быть полезна во множестве сценариев, таких как удаление, замена определенных символов, обработка специальных символов, а также валидация и преобразование текстовых данных.

В этом разделе мы рассмотрим различные методы замены символов в строке в Python. Мы ознакомимся с основными методами, такими как replace() , translate() и join() , которые предоставляют удобные инструменты для выполнения замены символов в строке. Также мы рассмотрим использование регулярных выражений с помощью модуля re , который предоставляет более мощные и гибкие возможности для замены символов на основе шаблонов, и замену символа по его индексу с помощью срезов.

Замена символа в строке Python с помощью метода replace()

Метод replace() является одним из наиболее простых и популярных способов замены символов в строке в Python. Он позволяет заменить все вхождения указанного символа или подстроки в строке на другую строку.

Синтаксис метода replace() выглядит следующим образом:

string.replace(old, new[, count])
  • string : это исходная строка, в которой нужно выполнить замену символа или подстроки.
  • old : это символ или подстрока, которые нужно заменить.
  • new : это строка, на которую нужно заменить найденные символы или подстроки.
  • count (необязательный аргумент): это максимальное количество замен, которые нужно выполнить. Если он не указан, то все вхождения будут заменены.

Пример использования метода replace() для замены символа в строке:

# Исходная строка text = "Hello, world!" # Замена символа "," на "!" new_text = text.replace(",", "!") print(new_text) # Вывод: "Hello! world!"

В данном примере мы использовали метод replace() для замены символа «,» на символ «!». Результат замены сохранен в новую переменную new_text , и после выполнения программы мы получили измененную строку «Hello! world!».

Обратите внимание, что метод replace() создает новую строку с замененными символами, и исходная строка остается неизменной. Если нужно изменить исходную строку, необходимо присвоить ее новое значение с помощью оператора присваивания ( = ), как показано в примере выше.

Метод replace() также поддерживает более сложные операции замены, такие как замена нескольких символов или подстрок, использование регулярных выражений и т. д.

Замена символа в строке Python с помощью метода translate()

Метод translate() представляет более мощный и гибкий способ замены символов в строке в Python. Он позволяет выполнять замены с использованием таблицы перевода символов, что делает его особенно полезным для замены нескольких символов или выполнения сложных операций замены с использованием различных правил.

Синтаксис метода translate() выглядит следующим образом:

string.translate(table[, deletechars])
  • string : это исходная строка, в которой нужно выполнить замену символов.
  • table : это таблица перевода символов, представляющая собой словарь или объект типа str.maketrans , созданный с помощью метода str.maketrans() .
  • deletechars (необязательный аргумент): это строка, содержащая символы, которые нужно удалить из исходной строки.

Пример использования метода translate() для замены символа в строке:

# Исходная строка text = "Hello, world!" # Создание таблицы перевода символов translation_table = str.maketrans(",", "!") # Замена символа "," на "!" с помощью таблицы перевода new_text = text.translate(translation_table) print(new_text) # Вывод: "Hello! world!"

данном примере мы создали таблицу перевода символов с помощью метода str.maketrans() , указав символ «,» как символ для замены и символ «!» как символ замены. Затем мы использовали метод translate() для выполнения замены в исходной строке. Результат замены сохранен в новую переменную new_text , и после выполнения программы мы получили измененную строку «Hello! world!».

Метод translate() также позволяет удалять символы из строки, указав их в аргументе deletechars , и выполнять более сложные операции замены, такие как замена подстрок, использование регулярных выражений и т. д.

Замена символа в строке Python с помощью метода join()

Метод join() в Python используется для объединения элементов списка или другого итерируемого объекта в строку, разделяя их указанным разделителем. Однако, этот метод также может быть использован для замены символов в строке путем присоединения новых символов к существующей строке.

Синтаксис метода join() выглядит следующим образом:

разделитель.join(список_или_другой_итерируемый_объект)
  • разделитель : это строка, которая будет использована в качестве разделителя между элементами списка или другого итерируемого объекта.
  • список_или_другой_итерируемый_объект : это список или другой итерируемый объект, элементы которого нужно объединить в строку.

Пример использования метода join() для замены символа в строке:

# Исходная строка text = "Hello, world!" # Замена символа "," на "!" с помощью метода join() new_text = "!".join(text.split(",")) print(new_text) # Вывод: "Hello! world!"

В данном примере мы использовали метод split() для разделения исходной строки text по символу «,» и создания списка, содержащего элементы строки между разделителями. Затем мы использовали метод join() с разделителем «!» для объединения элементов списка в новую строку. Результат замены сохранен в переменной new_text , и после выполнения программы мы получили измененную строку «Hello! world!».

Метод join() также может быть использован для замены более сложных подстрок в строке путем создания списка, содержащего новые значения, и их объединения с использованием разделителя. Этот метод является эффективным способом замены символов в строке, особенно при работе с большими текстовыми данными.

Замена символа в строке Python с помощью регулярных выражений

Регулярные выражения (Regular Expressions) — мощный инструмент для работы с текстовыми данными, включая замену символов в строке. В Python регулярные выражения реализованы в модуле re , который предоставляет функциональность для работы с регулярными выражениями.

Для замены символа или подстроки в строке с использованием регулярных выражений в Python, можно воспользоваться функцией re.sub() из модуля re . Синтаксис функции re.sub() выглядит следующим образом:

re.sub(шаблон, замена, строка)
  • шаблон : это регулярное выражение, которое указывает, какие символы или подстроки нужно найти в строке для замены.
  • замена : это строка, на которую будут заменены найденные символы или подстроки.
  • строка : это исходная строка, в которой производится замена.

Пример использования функции re.sub() для замены символа в строке:

import re # Исходная строка text = "Hello, world!" # Замена символа "," на "!" с помощью регулярного выражения new_text = re.sub(r",", "!", text) print(new_text) # Вывод: "Hello! world!"

В данном примере мы использовали регулярное выражение r»,» , которое указывает на символ «,». Затем мы передали это выражение в функцию re.sub() в качестве шаблона для поиска символа «,» в исходной строке text , и указали строку «!» в качестве замены. Результат замены сохранен в переменной new_text , и после выполнения программы мы получили измененную строку «Hello! world!».

Функция re.sub() также поддерживает более сложные регулярные выражения, что позволяет осуществлять более гибкую замену символов или подстрок в строке. Однако, при использовании регулярных выражений необходимо быть внимательными, так как неправильно составленное выражение может привести к нежелательным результатам.

Замена символа в строке Python по его индексу

Еще один способ замены символа в строке Python — это использование индексации строк и операции присваивания. В Python строки являются неизменяемыми (immutable) объектами, поэтому нельзя просто так заменить символ в строке. Однако, можно создать новую строку, скопировав часть исходной строки с заменой нужного символа.

Пример замены символа в строке по его индексу:

# Исходная строка text = "Hello, world!" # Замена символа на позиции 7 (индексация с 0) на "W" new_text = text[:7] + "W" + text[8:] print(new_text) # Вывод: "Hello, World!"

В данном примере мы использовали операцию среза ( text[:7] и text[8:] ), чтобы скопировать части исходной строки до и после заменяемого символа на позиции 7 (индексация в Python начинается с 0). Затем мы конкатенировали эти части с новым символом «W» с помощью оператора + и сохранили результат в переменной new_text . В итоге, мы получили измененную строку «Hello, World!».

Однако, стоит отметить, что при замене символа в строке по его индексу нужно быть осторожными с выходом за пределы длины строки, чтобы избежать ошибок индексации. Также, при замене символа в строке с использованием операции присваивания, создается новая строка, что может быть неэффективным при работе с большими строками. В таких случаях, более эффективными могут быть другие методы замены символов, такие как использование методов replace() , translate() или регулярных выражений, которые описаны в предыдущих разделах.

Как заменить символ внутри строки в JavaScript

Вы можете использовать JavaScript-метод replace() для замены любого символа в строке. Однако replace() заменит только первое вхождение указанного символа. Чтобы заменить все вхождения, вы можете использовать модификатор global ( g ). В следующем примере показано, как заменить все символы подчеркивания ( _ ) в строке на дефис ( — ).

    JavaScript Replace Character in a String   

quick_brown_fox

kwork banner 480x320 smsc banner 480x320 skillbox banner 480x320

Читайте также

Похожие примеры:
  • Как удалить пробелы из начала и конца строки в jQuery
  • Как найти строку между двумя словами с помощью jQuery
  • Как получить подстроку из строки с помощью jQuery

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *