Как к верхнему регистру первый символ каждого слова с помощью regex в VB.NET?

Ну, я смотрел это на Википедию , и они говорят следующее:

C, однако, имеет только один оператор сдвига вправо,>>. Много компиляторов C выбирают, какой сдвиг вправо выполнить в зависимости от того, какое целое число смещается; часто целые числа со знаком смещаются с помощью арифметического сдвига, и целые числа без знака смещаются с помощью логического сдвига.

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

7
задан Jeremy 9 August 2014 в 05:11
поделиться

6 ответов

РЕДАКТИРОВАТЬ: VB.NET код, добавленный ниже

Dim input As String = "The quick brown fox jumps over the lazy dog"
Dim pattern As String = "\b(\w|['-])+\b"
' With lambda support:
Dim result As String = Regex.Replace(input, pattern, _
    Function (m) m.Value(0).ToString().ToUpper() & m.Value.Substring(1))

Если вы не можете использовать лямбды, используйте вместо этого MatchEvaluator:

Dim evaluator As MatchEvaluator = AddressOf TitleCase
Dim result As String = Regex.Replace(input, pattern, evaluator)

Public Function TitleCase(ByVal m As Match) As String
    Return m.Value(0).ToString().ToUpper() & m.Value.Substring(1)
End Function

Это не совсем регистр Title в смысле форматирования MS Word, но достаточно близко.


Вы не указали язык , но в C # это можно сделать:
string input = "The quick brown fox jumps over the lazy dog";
string pattern = @"\b(\w|['-])+\b";
string result = Regex.Replace(input, pattern,
                    m => m.Value[0].ToString().ToUpper() + m.Value.Substring(1));

Это прекрасно обрабатывает однобуквенные слова, так как Substring не выдаст ошибку при вводе чего-то вроде «A».

11
ответ дан 6 December 2019 в 04:47
поделиться

Why not just use the inbuilt TextInfo.ToTitleCase() method already in the .NET Framework?

string capitalized = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase("this string should be capitalized!");
27
ответ дан 6 December 2019 в 04:47
поделиться

.NET имеет встроенную поддержку для этого. См. Документацию в TextInfo.ToTitleCase .

Мой код содержит некоторые методы расширения для C #. Я предполагаю, что они тоже есть в VB.NET, но я недостаточно хорошо знаю VB.NET, чтобы преобразовать их самостоятельно.

public static class StringExtensions {
    public static string ToTitleCase(this string value) {
        return value.ToTitleCase(CultureInfo.InvariantCulture);
    }

    public static string ToTitleCase(this string value, CultureInfo culture) {
        return value.ToTitleCase(culture.TextInfo);
    }

    public static string ToTitleCase(this string value, TextInfo textInfo) {
        return textInfo.ToTitleCase(value);
    }
}
5
ответ дан 6 December 2019 в 04:47
поделиться

Не в «чистом» регулярном выражении, но в большинстве реализаций, специфичных для платформы, есть способ сделать это:

Например, в python:

import re
re.compile(r'\b\w').sub(lambda x: x.group(0).upper(), 'hello')

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

В VB.NET вы можете передать свою «заменяющую» лямбду как Function (x) x.Value (0) .ToString (). ToUpper ()

2
ответ дан 6 December 2019 в 04:47
поделиться

Вы можете это сделать, однако это довольно распространенная работают на большинстве языков программирования. Например, в PHP используется функция ucwords ($ word).

0
ответ дан 6 December 2019 в 04:47
поделиться
 s/\b(\w+)\b/ucfirst($1)/ge
4
ответ дан 6 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: