R提取字符串匹配模式和空格前

R extract string matching pattern and before space

提问人:YASEM 提问时间:6/23/2023 最后编辑:YASEM 更新时间:6/23/2023 访问量:42

问:

我真的是 R 的新手,在尝试提取或 gsub 我想要的字符串部分时,很难理解语法的含义 我的数据如下所示

d <- "Para | YTX-456 | XYZ-123456 | NTX-897"

我想提取“XYZ-123456”,所以三个特定的字母,“-”和任何后面但没有空格的数字。到目前为止,我尝试的所有内容都只是提取带有空格的数字。如何在字符串中找到“XYZ-”的匹配项并将其与后面的所有数字一起提取?

谢谢!

r 字符串 匹配 提取 gsub

评论

0赞 YASEM 6/23/2023
感谢安德烈的帮助!不幸的是,这不起作用,因为我的数据比我描述的要复杂一些。我现在将更新帖子,但基本上我的字符串如下所示“Para |YTX-456型 |XYZ-123456 |NTX-897”。我只需要提取“XYZ-123456”。您的回复摘录“Para |YTX-456型 |XYZ-123456 |”
1赞 C. Murtaugh 6/23/2023
str_extract(d, 'XYZ-[:digit:]*')- 这将拉出“XYZ-”,后跟任意数量的数字。这里有一个很棒的软件包备忘单,当我使用 R 时,我几乎总是打开它。stringr
1赞 YASEM 6/23/2023
@C.Murtaugh,这是一个很好的资源,非常感谢

答:

1赞 jpsmith 6/23/2023 #1

您可以在此处使用,在所需的“XYZ-”模式之后识别所有数字:stringr::str_extract()[0-9]+

stringr::str_extract(d,"XYZ-[0-9]+")

# [1] "XYZ-123456"

评论

2赞 C. Murtaugh 6/23/2023
这是一个比我给出的解决方案更好的解决方案,因为在括号正则表达式之后使用,而不是像我那样使用,这意味着它只会在提取的字符串后面至少有一个数字返回。 如果有零个或多个数字,将返回它。+**
1赞 Chris Ruehlemann 6/23/2023 #2

既然你提到,这里有一个解决方案(这里是首选,当每个字符串需要单个匹配时使用--就像你的情况一样):gsubsubsub

sub(".*(XYZ\\S+).*", "\\1", d)
[1] "XYZ-123456"

在这里,我们将所讨论的子字符串定义为捕获组,方法是将其包装到 和 中。子字符串本身部分从字面上匹配 (),部分匹配 ,一个否定字符类,该类匹配任何空格字符。()XYZ\\S+