Ответ 1
Простым решением является использование границ слов:
#\b[a-z0-9-_]+#i
В качестве альтернативы вы можете совместить только несколько символов:
#([\s\-_]|^)([a-z0-9-_]+)#i
Я использую этот #(\s|^)([a-z0-9-_]+)#i
для того, чтобы загладить каждую первую букву каждое слово, я хочу, чтобы она также заглавную букву, если после специальной отметки, как тире (-)
Теперь он показывает:
This Is A Test For-stackoverflow
И я хочу это:
This Is A Test For-stackoverflow
Любые предложения/образцы для меня?
Я не профессионал, поэтому постарайся понять это просто для меня.
Простым решением является использование границ слов:
#\b[a-z0-9-_]+#i
В качестве альтернативы вы можете совместить только несколько символов:
#([\s\-_]|^)([a-z0-9-_]+)#i
+1 для границ слов, а вот сопоставимое решение Javascript. Это объясняет и обладателей:
var re = /(\b[a-z](?!\s))/g;
var s = "fort collins, croton-on-hudson, harper ferry, coeur d'alene, o'fallon";
s = s.replace(re, function(x){return x.toUpperCase();});
console.log(s); // "Fort Collins, Croton-On-Hudson, Harper Ferry, Coeur D'Alene, O'Fallon"
На самом деле не нужно совпадать с полной строкой, просто совпадающей с первой буквой, отличной от прописной, например:
'~\b([a-z])~'
Попробуйте #([\s-]|^)([a-z0-9-_]+)#i
- (\s|^)
соответствует пробельному символу (\s
) или началу строки (^
). Когда вы меняете \s
на [\s-]
, он соответствует любому символу пробела или тире.
это сделает
R.E.A.C De Boeremeakers
из
r.e.a.c de boeremeakers
(?<=\A|[ .])(?<up>[a-z])(?=[a-z. ])
используя
Dim matches As MatchCollection = Regex.Matches(inputText, "(?<=\A|[ .])(?<up>[a-z])(?=[a-z. ])")
Dim outputText As New StringBuilder
If matches(0).Index > 0 Then outputText.Append(inputText.Substring(0, matches(0).Index))
index = matches(0).Index + matches(0).Length
For Each Match As Match In matches
Try
outputText.Append(UCase(Match.Value))
outputText.Append(inputText.Substring(Match.Index + 1, Match.NextMatch.Index - Match.Index - 1))
Catch ex As Exception
outputText.Append(inputText.Substring(Match.Index + 1, inputText.Length - Match.Index - 1))
End Try
Next
Здесь мое решение Python
>>> import re
>>> the_string = 'this is a test for stack-overflow'
>>> re.sub(r'(((?<=\s)|^|-)[a-z])', lambda x: x.group().upper(), the_string)
'This Is A Test For Stack-Overflow'
Прочтите о "позитивном взгляде" здесь: https://www.regular-expressions.info/lookaround.html