字符串中带有$的grep

字符串中带有$的grep,r,regex,R,Regex,在R中,如何grep字符串中有$的东西。在下面的示例中,我需要grep字符串“NB6106$MU-MU.rma” x您可以使用 x<-c("NB6106$MU-MU.rma", "NB610634$MU-MU.rma") x[grep(pattern="6106\\$.*\\.rma", x = x)] "(^|\\D)6106\\$.*\\.rma$" 如果(^ |\\D)匹配字符串的开头(^)或(|)一个非数字字符(\D),并在结尾处$确保字符串的结尾正好出现在之后。rma您需要对

在R中,如何grep字符串中有$的东西。在下面的示例中,我需要grep字符串“NB6106$MU-MU.rma”

x您可以使用

x<-c("NB6106$MU-MU.rma", "NB610634$MU-MU.rma")
x[grep(pattern="6106\\$.*\\.rma", x = x)]
"(^|\\D)6106\\$.*\\.rma$"

如果
(^ |\\D)
匹配字符串的开头(
^
)或(
|
)一个非数字字符(
\D
),并在结尾处
$
确保字符串的结尾正好出现在
之后。rma

您需要对其进行转义。$在正则表达式中,它本身表示字符串的结尾,所以您需要告诉R,这里的字面意思是$,它是通过转义完成的。转义字符是
\
。因此,理论上,您将键入
\$
。但是,由于要将模式作为文本字符串(在引号内)编写,还需要转义转义字符,以便R知道如何将其逐字传输到正则表达式解释程序。因此:
\\$


代码的其他问题:*不表示“任何字符”。它的意思是“将上一个字符重复零次或多次”
表示任意字符,
*
表示任意字符的任意数量,这就是您要查找的字符。当然,如果你想要一个文字句点,你也需要转义:
\\。

使用:\\$来阻止解释。
"(^|\\D)6106\\$.*\\.rma$"