Я знаю, как загладить первую букву в каждом слове. Но я хочу знать, как использовать первую букву каждого предложения в C#.Как загладить первую букву каждого предложения?
ответ
Рассмотрите предложение как слово, содержащее пробелы, заканчивающееся периодом.
Или восклицательный знак. Или вопросительный знак. Также обратите внимание, что могут быть пустые предложения - например, когда есть три восклицательных знака в строке. –
предложения могут заканчиваться другими знаками препинания, и такие вещи, как кавычки, могут привести к тому, что эти знаки препинания будут показывать другие места, чем в конце предложения. –
@Fyodor Soikin - вся пунктуация может быть проверена char.IsPunctuation и char.ToUpper для пунктуации вернет тот же символ. поэтому ваши заботы не нужны. – Andrey
В первом приближении вы могли бы рассматривать любую последовательность, такую как [a-z]\.[ \n\t]
как конец предложения.
[.!?] \ S (? [A-z]) –
@Joel: хорошее предложение - определенное улучшение. –
@Joel Возможно, захват текста перед пунктуацией тоже? Это могло бы помочь отфильтровать общие аббревиатуры, такие как доктор, г-жа, миссис и т. Д. – statenjason
Существует код VB на this page, который не должен быть слишком сложным для преобразования в C#.
Однако последующие сообщения указывают на ошибки в алгоритме.
This blog имеет некоторые C# код, который претендует на работу:
Это автоматический заглавной буквы после каждой полной остановки (период), знак вопроса и восклицательный знак.
ОБНОВЛЕНИЕ 16 февраля 2010: Я переработал его, так что он не влияет на такие строки, как URL, и т.п.
Это не обязательно является нетривиальной задачей. Предложения могут заканчиваться рядом различных знаков препинания, и те же знаки препинания не всегда обозначают конец предложения (аббревиатуры, такие как доктор, могут представлять собой определенную проблему, поскольку их потенциально много).
Это, как говорится, вы можете получить «достаточно хорошее» решение, используя регулярные выражения для поиска слов после препинания в пунктах назначения, но вам нужно будет добавить несколько особых случаев. Может быть, проще обрабатывать строковый символ символом или слово за словом. Вам все равно придется обрабатывать все те же особые случаи, но это может быть проще, чем пытаться построить это в регулярное выражение.
Существует множество странных правил для грамматики и пунктуации. Любое решение, которое вы придумали, вероятно, не сможет учесть их всех. Некоторые вещи, чтобы рассмотреть следующие вопросы:
- Приговоры могут закончиться с различными знаками препинания
- Некоторых знаками препинания, которые заканчиваются предложения также могут быть использованы в середине предложения (например, аббревиатуры, такие как д-р Mr (.!?) например,
- Предложения могут содержать вложенные предложения. Котировки могут представлять особую проблему (например, он сказал: «Это сложная проблема! Интересно, - подумал он, - если это можно решить».)
Как вы получили так много авансов, фактически не давая ответа на вопрос? Я хочу знать имя твоего одеколона! –
@jdk: Справедливая точка зрения, но дух моего ответа был больше того, что вы, вероятно, не можете сделать действительно хорошую работу во всех случаях. Я добавил немного больше советов для создания «достаточно хорошего» решения, которое может работать * больше всего времени. –
Когда вы учитесь в школе градиента, вам нужно либо найти хорошее решение, либо доказать, что он NP-полностью. Ответ подобен доказательству того, что он NP-полный (он просто сдался). – earlNameless
Не забывайте предложения с круглыми скобками. Кроме того, * если используется как идентификатор для жирного текста.
мне нужно сделать что-то подобное, и это служило моим целям. Я передаю свои «предложения» как строки IEnumerable
.
// Read sentences from text file (each sentence on a separate line)
IEnumerable<string> lines = File.ReadLines(inputPath);
// Call method below
lines = CapitalizeFirstLetterOfEachWord(lines);
private static IEnumerable<string> CapitalizeFirstLetterOfString(IEnumerable<string> inputLines)
{
// Will output: Lorem lipsum et
List<string> outputLines = new List<string>();
TextInfo textInfo = new CultureInfo("en-US", false).TextInfo;
foreach (string line in inputLines)
{
string lineLowerCase = textInfo.ToLower(line);
string[] lineSplit = lineLowerCase.Split(' ');
bool first = true;
for (int i = 0; i < lineSplit.Length; i++)
{
if (first)
{
lineSplit[0] = textInfo.ToTitleCase(lineSplit[0]);
first = false;
}
}
outputLines.Add(string.Join(" ", lineSplit));
}
return outputLines;
}
Я знаю, что я немного поздно, но так же, как Вам, мне нужно, чтобы заработать каждый первый символ на каждом из моих предложений. Я просто упал сюда (и много других страниц, пока я изучал), и не нашел ничего, чтобы помочь мне. Итак, я сжег некоторые нейроны и сам создал алгоритм.
Вот мой метод расширения капитализировать предложения:
public static string CapitalizeSentences(this string Input)
{
if (String.IsNullOrEmpty(Input))
return Input;
if (Input.Length == 1)
return Input.ToUpper();
Input = Regex.Replace(Input, @"\s+", " ");
Input = Input.Trim().ToLower();
Input = Char.ToUpper(Input[0]) + Input.Substring(1);
var objDelimiters = new string[] { ". ", "! ", "? " };
foreach (var objDelimiter in objDelimiters)
{
var varDelimiterLength = objDelimiter.Length;
var varIndexStart = Input.IndexOf(objDelimiter, 0);
while (varIndexStart > -1)
{
Input = Input.Substring(0, varIndexStart + varDelimiterLength) + (Input[varIndexStart + varDelimiterLength]).ToString().ToUpper() + Input.Substring((varIndexStart + varDelimiterLength) + 1);
varIndexStart = Input.IndexOf(objDelimiter, varIndexStart + 1);
}
}
return Input;
}
Подробнее об алгоритме:
Этот простой алгоритм начинает удаление все двойные пробелы. Затем он использует первый символ строки. затем выполните поиск каждого разделителя. Когда вы найдете его, загладьте самый следующий символ.
Я упростил добавление/удаление или редактирование разделителей, поэтому вы можете многое изменить, как работает код с небольшими изменениями. Он не проверяет, выходят ли подстроки из длины строки, потому что разделители заканчиваются пробелами, а алгоритм начинается с «Trim()», поэтому каждый разделитель, если он найден в строке, будет сопровождаться другим символом.
Важно:
Вы не указали, что были именно ваши потребности. Я имею в виду, это корректор грамматики, это просто для того, чтобы прикрыть текст и т. Д. Итак, важно учитывать, что мой алгоритм - это всего лишь , который идеально подходит для моих потребностей, которые могут отличаться от ваших.
* Этот алгоритм был создан для форматирования «Product Description», который не нормализуется (почти всегда полностью закрыт) в приятном формате для пользователя (Чтобы быть более конкретным, мне нужно показать красивую и «меньшую», текст для пользователя. Итак, все символы в Upper Case просто противоположны тому, что я хочу). Таким образом, он не был создан, чтобы быть грамматически совершенным.
* Также есть некоторые исключения, в которых персонаж не будет в верхнем регистре, потому что плохое форматирование.
* Я выбираю включать пробелы в разделитель, поэтому «http://www.stackoverflow.com» не станет «http://www.Stackoverflow.Com». С другой стороны, такие предложения, как «коробка blue.it на полу», станут «Коробка синяя. На полу», а не «Коробка синяя. Она находится на полу»
* В аббревиатурах дела он будет использоваться, но опять же, это не проблема, потому что мои потребности просто показывают описание продукта (где грамматика не критична). И в аббревиатурах, таких как г-н или д-р, первый символ - это имя, поэтому он идеально подходит для капитализации.
Если вам или кому-то еще нужен более точный алгоритм, я буду рад его улучшить.
Надеюсь, что я помогу кому-нибудь!
Однако вы можете сделать класс или метод для преобразования каждого текста в TitleCase. Вот пример, который вам нужно просто вызвать метод.
public static string ToTitleCase(string strX)
{
string[] aryWords = strX.Trim().Split(' ');
List<string> lstLetters = new List<string>();
List<string> lstWords = new List<string>();
foreach (string strWord in aryWords)
{
int iLCount = 0;
foreach (char chrLetter in strWord.Trim())
{
if (iLCount == 0)
{
lstLetters.Add(chrLetter.ToString().ToUpper());
}
else
{
lstLetters.Add(chrLetter.ToString().ToLower());
}
iLCount++;
}
lstWords.Add(string.Join("", lstLetters));
lstLetters.Clear();
}
string strNewString = string.Join(" ", lstWords);
return strNewString;
}
- 1. Как загладить первую букву каждого предложения И дать Пользователю возможность изменить букву ниже?
- 2. Капитализируя первую букву каждого предложения в Python
- 3. Распечатайте первую букву каждого слова предложения
- 4. Верните первую букву каждого предложения в строку
- 5. Python 3 - Как загладить первую букву каждого предложения при переводе из кода Морзе
- 6. Как использовать $holders, чтобы загладить первую букву каждого предложения в регулярном выражении?
- 7. загладить первую букву в построителе отчетов, зарегистрированной
- 8. Как загладить первую букву в опции выбора с помощью css
- 9. Как загладить только первую букву строки, а нижнее - остальное?
- 10. Ruby - использовать первую букву каждого предложения в абзаце
- 11. получить первую букву каждого слова
- 12. Обозначить первую букву каждого слова
- 13. Как загладить первую букву каждого слова в текстовых полях только для чтения, используя jquery
- 14. Как загладить первую букву каждого слова, кроме определенных слов («и», «но», «от»)?
- 15. Как использовать текст в поле ввода, первую букву предложения и букву после fullstop
- 16. Как найти первую букву каждого слова?
- 17. regexp, чтобы загладить каждую первую букву каждого слова и игнорировать некоторые
- 18. Пытается загладить первую букву каждого слова в текстовом поле С помощью Swift
- 19. загладить первую букву каждого слова в предложении с использованием библиотеки boost
- 20. Mysql извлекает первую букву каждого слова в определенном столбце
- 21. сделать прописной первую букву имени
- 22. Получите первую букву каждого слова в PHP
- 23. Хочет извлечь первую букву каждого слова
- 24. заглавной первую букву каждого слова в Scala
- 25. заглавной первую букву каждого слова в предложении
- 26. получить первую букву каждого слова внутри li
- 27. Notepad ++ заглавной Каждый первую букву каждого слова
- 28. заглавной первую букву каждого слова - Руби
- 29. заглавной первую букву каждого слова в массиве
- 30. CSS капитализировать первую букву каждого слова капитализированное
Вы должны знать, как заканчиваются ваши предложения. Вопрос неполный! –