Программное построение текста

Кошка (конкатенация строк)

Самый простой и понятный. Объедините строки и покончим с этим. При интенсивном использовании вы иногда увидите, как это оптимизировано в C# и Java с использованием объекта StringBuilder.

"Hello" + " " + "world!"

Присоединиться

Объединение строк с возможностью добавления чего-либо между строками.

#1-2-3-4-5
#PowerShell
[String]::Join('-',(1,2,3,4,5))
#Python
'-'.join(['1','2','3','4','5'])

Заменять

Заменить все вхождения в строке.

# 'Hello world' -> 'Hey world'
'Hello world'.replace('Hello', 'Hey')

Формат

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

// C# - Today's date is 7/2/2019 10:24:53 AM
String.Format("Today's date is {0}", DateTime.Now);

Интерполяция строк

Это хороший способ, которым динамические языки избавились от старого стиля форматирования printf. Вот почему существует разница между кавычками «» и «» в динамических языках. '' обычно используется для простого текста, а "" используется для простого текста, который должен быть пропущен через интерполяцию строк.

# PowerShell
$x = 'Hello'
$y = 'world'
# Hello world - inserting strings by name
"$x $y"
"${x} ${y}"
# 5+5=10 - inserting expressions
"5+5=$(5+5)"
$n = 5
"$n+$n=$($n+$n)"

карта

Возьмите список строк и выполните одно и то же преобразование для всех из них.

# PowerShell - '11','12','13','14','15'
1,2,3,4,5 |% {"1$_"}

Шаблонизаторы

Генераторы внешнего интерфейса HTML используют их. Они могут комбинировать иерархии обычного текста с переменными и кодом, легко генерируя ваш документ на лету. Ваш любимый интерфейсный фреймворк почти наверняка использует один из них. Теоретически вы можете использовать их для файлов, отличных от HTML.

Регулярное выражение заменить

Regex — это один из инструментов goto для работы с текстом, но это не инструмент для знакомства. Его основная цель — найти текст, соответствующий шаблону, и вы определяете этот шаблон с помощью запроса регулярного выражения. Самая большая проблема заключается в том, что регулярное выражение может легко превратиться в ASCII-блеф или, другими словами, в нечитаемый беспорядок, который невозможно поддерживать. Если вы не усвоили грамматику регулярных выражений или столкнулись со сложным запросом, это может быть код только для чтения. Единственный способ обновить некоторый код, доступный только для чтения, — это переписать его целиком с нуля.

// what? - no this finds single words wrapped in 'quotes'
'\w+?'

Как только вы научитесь писать эти запросы, вы сможете использовать их для операций поиска/замены.

//C# "string with 'quoted' text" -> "string with 'replaced' text"
Regex.replace("string with 'quoted' text","'\w+?'", 'replaced');

Более высокий уровень — это использование групп захвата.

//C# "1 cat 2 dogs 3 boats" -> "my cat my dogs my boats"
Regex.replace("cat dog boat", '\d (w+)', 'my $1');

Вим

Потому что я не мог просто остановиться на регулярном выражении. Этот текстовый редактор командной строки считается мощным из-за того, что вы не столько вводите текст, сколько отправляете команды программе. Эти команды можно комбинировать и сохранять для последующего использования. Вы также можете сохранить эти команды в файл и запускать их с другими файлами, тем самым автоматизируя нажатия клавиш. Я считаю, что вы также можете использовать предшественника Vim ed для такого же типа манипуляций со сценарием.

vim -c "source script.vim" A.txt

Заключительные примечания

В основном я записываю это в качестве мыслительного упражнения для себя, документируя различные подходы, которые приходят на ум. Я также хочу использовать здесь далеко и маловероятные подходы, поэтому я добавил vim в качестве опции сценария. Я не могу представить себе использование vim таким образом на практике, но это напомнило мне, как MS Word добавляет команды в конец своего стека отмены. Пожалуйста, оставляйте любые комментарии, напоминающие мне о подходах, которые я забыл, или дайте мне знать, если что-то неясно.