在R中匹配特殊字符
嗨,我有以下数据。在R中匹配特殊字符
shopping_list <- c("apples x4", "bag of flour", "bag of sugar", "milk x2",
"appple+20gfree",
"BELI HG MSWAT ALA +VAT T 100g BAR WR",
"TOOLAIT CASSE+LSST+SSSRE 40g SAC MDC")
在我的第二步中,我删除了shopping_list
中的所有空格。
require(stringr)
shopping_list_trim <- str_replace_all(shopping_list, fixed(" "), "")
print(shopping_list_trim)
[1] "applesx4" "bagofflour" "bagofsugar"
[4] "milkx2" "appple+20gfree" "BELIHGMSWATALA+VATT100gBARWR"
[7] "TOOLAITCASSE+LSST+SSSRE40gSACMDC"
如果我想提取不包含加号的字符串,我使用下面的代码。
str_extract(shopping_list_trim, "^[^+]+$")
[1] "applesx4" "bagofflour" "bagofsugar" "milkx2" NA NA NA
想帮助提取包含加号的字符串。 我想输出是以下一个。
NA NA NA NA "appple+20gfree"
"BELIHGMSWATALA+VATT100gBARWR" "TOOLAITCASSE+LSST+SSSRE40gSACMDC"
有没有人有想法如何提取只包含加号的字符串?
这将这样的伎俩
> str_extract(shopping_list_trim, "^(?=.*\\+)(.+)$")
[1] NA
[2] NA
[3] NA
[4] NA
[5] "appple+20gfree"
[6] "BELIHGMSWATALA+VATT100gBARWR"
[7] "TOOLAITCASSE+LSST+SSSRE40gSACMDC"
正则表达式击穿
^(?=.*\\+) #Lookahead to check if there is one plus sign
(.+)$ #Capture the string if the above is true
关于正则表达式的这一部分'^(?=。* \\ +)'。 ?=的作用是什么?字符? –
@ssssssssssss它是一个向前看。它们的宽度为零意味着它们不会消耗任何字符串。因此,基本上我们只是检查字符串中是否存在“+”符号,而没有在字符串中向前移动。 ?=)'是lookahead的语法.. ** [read](http://www.regular-expressions.info/lookaround.html)** – rock321987
@ClasG给出的答案要简单得多,如果你觉得它很复杂理解 – rock321987
'grepl( “(?=。* \\ +)”,shopping_list_trim,PERL = T)' – rock321987