Impossible d'échapper à $ dans l'expression régulière en utilisant stringr :: string_extract [duplicate]

Nov 15 2020

Dans la chaîne j'essaye d'extraire le 0.4%qui vient après12 month(s)\n$500

Je recherche 12 month(s)\n$500puis saisis le numéro de point qui vient après.

À partir de là , "Pour correspondre à un littéral"$” or “^”, you need to escape them, $, et ^. "Mais quand je fais cela, j'obtiens l'erreur:

Error: '\$' is an unrecognized escape in character string starting ""(?<=12 month(s)\\n\$"

Qu'est-ce que je fais mal?

x <- "Term Minimum investment Rate Interest type Get this GIC\n3 month(s)\n$500 0.15% Simple\nChoose this GIC\n6 month(s)\n$500 0.25% Simple\nChoose this GIC\n9 month(s)\n$500 0.30% Simple\nChoose this GIC\n12 month(s)\n$500 0.40% Simple\nChoose this GIC\n18 month(s)\n$500 0.50% Simple\nChoose this GIC\n18 month(s)\n$500 0.50% Compound\nChoose this GIC"

as.numeric(stringr::str_extract(x, "(?<=12 month(s)\\n\$500)\\d\\.\\d{1,}"))

Réponses

RonakShah Nov 15 2020 at 07:31

Vous devez vous échapper avec une double barre oblique inverse dans R. ( \\). Vous devez également éviter d'ouvrir et de fermer les crochets ronds ( ()).

as.numeric(stringr::str_extract(x,"(?<=12 month\\(s\\)\n\\$500\\s)\\d\\.\\d{1,}"))
#[1] 0.4

En base R avec sub:

as.numeric(sub('.*12 month\\(s\\)\n\\$500\\s(\\d\\.\\d{1,}).*', '\\1', x))