2016-10-17 4 views
0

Würdest du mir bitte jemanden erklären, warum gibt str_detect (aus dem stringr Paket, Version 1.1.0) TRUE für jeden der drei folgenden Codes zurück, entgegen meiner Erwartung?Unerwarteter regulärer Ausdruck Ergebnis in stringr (R)

str_detect("01", "^[0]*[1-9]*[0]+") 
str_detect("01", "^0*[1-9]*0+") 
str_detect("01", "^0*[1-9]*0") 

Ich wollte von mindestens 1 Nicht-Null-Nummer und später eine Null in der Zeichenfolge gefolgt am Anfang für alle Nullen suchen.

klar, dass die „01“ string kann nicht in Frage kommen, da es nicht eine 0 nach dem 1. hat

Bin ich etwas fehlt? Ist das Muster falsch für das, wonach ich suche?

Vielen Dank für Ihre Zeit!

Antwort

0

ich glaube, Sie das folgende Muster wollen:

^0[1-9]+0 

Siehe https://regex101.com/r/v9cwHJ/1 für die vollständige Muster Erklärung.
Ihr spezifischer Fehler war * für die erste 0, es entspricht auch keiner.
Verwenden Sie auch + für die zweite Ziffer, um mindestens 1 zu finden.

2

Da die ersten 0 sind Optionnal in ihrem Muster, sie ignoriert werden und die nachfolgenden Nullen erfasst die 0 im String ...

Verwenden Sie einen $ das Ende der Zeichenfolge angeben:

str_detect("01", "^[0]*[1-9]*[0]+$") 
str_detect("01", "^0*[1-9]*0+$") 
str_detect("01", "^0*[1-9]*0$")