我对R还很陌生,在尝试提取或gsub我想要的字符串部分时,很难理解语法的含义。我的数据如下所示
d <- "Para | YTX-456 | XYZ-123456 | NTX-897"
我想提取“XYZ-123456”,所以这三个特定的字母,“-”和任何数字,遵循但 * 没有 * 的空间。到目前为止,我所尝试的一切都只是用空格提取数字。如何在字符串中找到“XYZ-”的匹配项,并将其与后面的所有数字沿着提取?谢谢!
qoefvg9y1#
您可以在这里使用stringr::str_extract(),其中[0-9]+标识所需的“XYZ-”模式之后的所有数字:
stringr::str_extract()
[0-9]+
stringr::str_extract(d,"XYZ-[0-9]+") # [1] "XYZ-123456"
chy5wohz2#
既然你提到了gsub,这里有一个使用sub的解决方案(在这里是首选的,因为sub是在每个字符串需要一个匹配时使用的-就像你的例子一样):
gsub
sub
sub(".*(XYZ\\S+).*", "\\1", d) [1] "XYZ-123456"
在这里,我们将所讨论的子字符串定义为捕获组,将其 Package 到(和)中。子字符串本身部分匹配(XYZ),部分匹配\\S+,这是一个负字符类,匹配任何不是的空格字符。
(
)
XYZ
\\S+
2条答案
按热度按时间qoefvg9y1#
您可以在这里使用
stringr::str_extract()
,其中[0-9]+
标识所需的“XYZ-”模式之后的所有数字:chy5wohz2#
既然你提到了
gsub
,这里有一个使用sub
的解决方案(在这里是首选的,因为sub
是在每个字符串需要一个匹配时使用的-就像你的例子一样):在这里,我们将所讨论的子字符串定义为捕获组,将其 Package 到
(
和)
中。子字符串本身部分匹配(XYZ
),部分匹配\\S+
,这是一个负字符类,匹配任何不是的空格字符。