gpt4 book ai didi

R : extracting words from a string 中的正则表达式

转载 作者:行者123 更新时间:2023-12-04 14:10:51 24 4
gpt4 key购买 nike

我想这是一个常见问题,我发现了很多网页,包括来自 SO 的一些网页,但我无法理解如何实现它。

我是 REGEX 的新手,我想在 R 中使用它来提取句子中的前几个单词。

例如,如果我的句子是

z = "I love stack overflow it is such a cool site"

我喜欢我的输出(如果我需要前四个字)
[1] "I love stack overflow"

或者(如果我需要最后四个字)
[1] "such a cool site"

当然,下面的作品
paste(strsplit(z," ")[[1]][1:4],collapse=" ")
paste(strsplit(z," ")[[1]][7:10],collapse=" ")

但我想尝试使用正则表达式解决性能问题,因为我需要处理非常大的文件(也是为了了解它)

我查看了几个链接,包括
Regex to extract first 3 words from a string
http://osherove.com/blog/2005/1/7/using-regex-to-return-the-first-n-words-in-a-string.html

所以我尝试了类似的东西
gsub("^((?:\S+\s+){2}\S+).*",z,perl=TRUE)
Error: '\S' is an unrecognized escape in character string starting ""^((?:\S"

我尝试了其他东西,但它通常返回整个字符串或空字符串。

substr 的另一个问题是它返回一个列表。也许它看起来像 [[]]运算符(operator)在处理大文件和执行应用程序时会减慢速度(??)。

看起来 R 中使用的语法有些不同?
谢谢 !

最佳答案

您已经接受了一个答案,但我将分享这个作为帮助您更多地了解 R 中的正则表达式的一种方式,因为您实际上非常接近于自己获得答案。

您的 gsub 有两个问题方法:

  • 您使用了单个反斜杠 ( \ )。 R 要求您转义它们,因为它们是特殊字符。您可以通过添加另一个反斜杠 ( \\ ) 来转义它们。如果你这样做 nchar("\\") ,您会看到它返回“1”。
  • 您没有指定替换应该是什么。在这里,我们不想替换任何内容,但我们想捕获字符串的特定部分。您在括号中捕获组 (...) ,然后您可以通过组号来引用它们。在这里,我们只有一个组,因此我们将其称为 "\\1" .

  • 你应该尝试过这样的事情:
    sub("^((?:\\S+\\s+){2}\\S+).*", "\\1", z, perl = TRUE)
    # [1] "I love stack"

    这基本上是在说:
  • 从“z”的内容开始工作。
  • 开始创建组 1。
  • 查找非空格(如单词)后跟空格( \S+\s+ )两次 {2}然后是下一组非空格( \S+ )。这将使我们得到 3 个单词,而不会在第三个单词之后得到空格。因此,如果您想要不同数量的单词,请更改 {2}比您实际追求的数字少一。
  • 在那里结束第 1 组。
  • 然后,只需从 "z"返回组 1 ( \1 ) 的内容。


  • 要获取最后三个单词,只需切换捕获组的位置并将其放在模式的末尾进行匹配即可。
    sub("^.*\\s+((?:\\S+\\s+){2}\\S+)$", "\\1", z, perl = TRUE)
    # [1] "a cool site"

    关于R : extracting words from a string 中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33856148/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com