私はこの#(\s|^)([a-z0-9-_]+)#i
を使用して、すべてのWordのすべての最初の文字を大文字にします。ダッシュ(-)のような特別なマークの後にある場合は、文字も大文字にしたいです。
今、それは示しています:
This Is A Test For-stackoverflow
そして、私はこれが欲しい:
This Is A Test For-Stackoverflow
提案/サンプルはありますか?
私はプロではないので、理解しやすいようにしてください。
単語の境界に対して+1。ここに、同等のJavascriptソリューションがあります。これも所有格を説明します。
var re = /(\b[a-z](?!\s))/g;
var s = "fort collins, croton-on-hudson, harper's ferry, coeur d'alene, o'fallon";
s = s.replace(re, function(x){return x.toUpperCase();});
console.log(s); // "Fort Collins, Croton-On-Hudson, Harper's Ferry, Coeur D'Alene, O'Fallon"
実際には、次のように大文字以外の最初の文字と一致するだけで完全な文字列と一致する必要はありません。
'~\b([a-z])~'
これは作ります
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
#([\s-]|^)([a-z0-9-_]+)#i
を試してください-(\s|^)
は空白文字(\s
)または行の先頭(^
)に一致します。 \s
を[\s-]
に変更すると、空白文字またはダッシュに一致します。