问题
I use this #(\s|^)([a-z0-9-_]+)#i
for capitalize every first letter every word, i want it also to capitalize the letter if it's after a special mark like a dash(-)
Now it shows:
This Is A Test For-stackoverflow
And i want this:
This Is A Test For-Stackoverflow
Any suggestions/samples for me?
I'am not a pro, so try to keep it simple for me to understand.
回答1:
A simple solution is to use word boundaries:
#\b[a-z0-9-_]+#i
Alternatively, you can match for just a few characters:
#([\s\-_]|^)([a-z0-9-_]+)#i
回答2:
+1 for word boundaries, and here is a comparable Javascript solution. This accounts for possessives, as well:
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"
回答3:
Actually dont need to match full string just match the first non-uppercase letter like this:
'~\b([a-z])~'
回答4:
Try #([\s-]|^)([a-z0-9-_]+)#i
- the (\s|^)
matches a whitespace character (\s
) or the start of the line (^
). When you change the \s
to [\s-]
, it matches any whitespace character or a dash.
回答5:
this will make
R.E.A.C De Boeremeakers
from
r.e.a.c de boeremeakers
(?<=\A|[ .])(?<up>[a-z])(?=[a-z. ])
using
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
回答6:
Here's my Python solution
>>> 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'
read about the "positive lookbehind" here: https://www.regular-expressions.info/lookaround.html
来源:https://stackoverflow.com/questions/6251463/regex-capitalize-first-letter-every-word-also-after-a-special-character-like-a