2016-10-15 3 views
0

sagen, dass ich ein Array wie diese:Wie wähle ich eine Zeichenfolge, die ein Wort mit einem Großbuchstaben mit einer Regex beginnt?

> names 
=> ["John", "Van", "der", "and", "an", "the boys and John Smith"] 

Wie kann ich nur John wählen, Van und the boys and John Smith aus diesem Array?

Ich versuchte this regex aber es fehlt die letzte Zeichenfolge, die die heikelsten ist:

/^[A-Z]\w*/ 

Was desto vollständiger Ansatz ist, dass andere Instanzen fangen kann, wo ein Wort, das in der Mitte eines erscheint kapitalisiert String, den ich vermisse?

Edit 1

Ein andere Saite, die ich es zu erfassen in der Lage sein möchte, ist: John Van der Lyn, wo es ein Name ist, der innerhalb der ersten & Nachnamen ein Wort mit einem gemeinsamen Brief hat.

+0

Spiel alle Saiten mit aktivierten Wörtern oder nur aktivierte Namen? –

+0

@ sagarpandya82 Ich werde mich für alle Strings mit großgeschriebenen Wörtern entscheiden, weil ich glaube, dass Großbuchstaben nicht möglich sind. Wenn Sie jedoch einen Vorschlag haben, nur großgeschriebene Namen zu erfassen, dann teilen Sie das, denn das ist das ultimative Ziel. – marcamillion

+2

'^ (? =. * \ B [A-Z]). *' – revo

Antwort

3

Regex:

^(?=.*\b[A-Z]).* 

Dies profitiert von einer positiven Vorausschau. Es prüft, ob es ein Wort gibt, das mit einem Großbuchstaben in der Eingabezeichenfolge beginnt und dann mit dem ganzen Wort übereinstimmt.

Erläuterung:

^    # Assert beginning of subject string 
(?=    # Construct a positive lookahead 
    .*\b[A-Z]  # Match start of a capitalized word 
)    # End of lookahead 
.*    # If lookahead was successful, match whole subject string 
2

Sie können eine einfache \b\p{Lu} verwenden, die jede Groß Unicode Buchstaben finden, die ein Wort beginnt (wie \b ist ein word boundary):

def get_names(names) 
    names.select{ |name| name[/\b\p{Lu}/] } 
end 

names = ["John", "Van", "der", "and", "an", "the boys and John Smith"] 
puts get_names(names) # ['John', 'Van', 'the boys and John Smith'] 

Siehe Ruby demo

Verwandte Themen