问题描述
我正在创建一个要放入 mutate() 的小示例。不知道为什么这不起作用。
> str_extract("rs1234-<b>C</b>","^rs*\\d$")
[1] NA
如果您能指出我对语言的误解而不是仅仅提供解决方案,我会很棒。我希望得到“rs1234”。
解决方法
^rs*\d$
正则表达式匹配
-
^
- 字符串的开始 -
rs*
-r
以及零次或多次出现的s
字符 -
\d
- 一个数字 -
$
- 字符串结束。
因此,您的模式匹配 rsssss1
、r3
等字符串。
你需要
str_extract("rs1234-<b>C</b>","^rs\\d+")
其中 ^rs\d+
匹配字符串开头的 rs
,然后匹配一位或多位数字。见this regex demo。
但是如果我只想要“rs”和最后一个数字之间的子字符串。我该怎么办?
您将使用 rs.*\d
:
str_extract("rs1234-<b>C</b>","rs.*\\d")
其中 rs.*\d
匹配 rs
,然后是除换行符以外的任意零个或多个字符,然后是一个数字。
注意:如果您还需要匹配行尾,则需要在最后一个模式前添加 (?s)
内联 DOTALL 修饰符。