【问题标题】:regex from first character to the end of the string从第一个字符到字符串结尾的正则表达式
【发布时间】:2013-03-31 23:40:57
【问题描述】:

related post 中,有人问如何从字符串的开头抓取到第一次出现的字符。我想通过询问如何从字符串的某个字符抓取到结尾来扩展我自己对正则表达式的了解。

我如何使用正则表达式(不是strsplit)和 gsub 从第一个空格的开头抓取到字符串的结尾?

dob <- c("9/9/43 12:00 AM/PM", "9/17/88 12:00 AM/PM", "11/21/48 12:00 AM/PM")

我在这里尝试了:gsub(".*? ", "", dob),但它从最后一个空间而不是第一个空间中抓取,所以我尝试了gsub(".{1}? ", "", dob),但由于时间原因它过于贪婪。

最终解决方案将与以下内容相同:

sapply(lapply(strsplit(dob, "\\s+"), "[", 2:3), paste, collapse=" ")
##[1] "12:00 AM/PM" "12:00 AM/PM" "12:00 AM/PM"

注意:R 正则表达式与一般的正则表达式不同

【问题讨论】:

  • 您的结果表明您想要从第一个字符到第二个空格的所有内容。
  • 我真是个笨蛋。修复了 Matthew。
  • 您要求的内容和您显示的最终结果仍然不一致。因此,你会得到两个答案,它们会给你两种不同的东西。
  • 我回去使一切保持一致。我很抱歉。我在想一些事情并输入了那个,而不是真正的问题。

标签: regex r


【解决方案1】:

试试:

gsub("^(.*?) .*$", "\\1", dob)
# [1] "9/9/43"   "9/17/88"  "11/21/48"

如果你想从第一个空格到字符串的末尾,试试:

gsub("^.*? (.*)$", "\\1", dob)
# [1] "12:00 AM/PM" "12:00 AM/PM" "12:00 AM/PM"

【讨论】:

  • Daniel 和 Juba 的答案都对我有用,但这个更普遍,因为 gsub("^.* .*? (.*)$", "\\1", dob) 可以从第二个空格开始。
【解决方案2】:

下面试试

出生日期 [1] “9/9/43 12:00 AM/PM” “9/17/88 12:00 AM/PM”
[3] “11/21/48 12:00 AM/PM”
gsub("(.?) (.$)", "\2", dob)
[1] "12:00 AM/PM" "12:00 AM/PM" "12:00 AM/PM"

【讨论】:

    【解决方案3】:

    您忘记了字符串开头的指示符:

    gsub("^.*? ", "", dob)
    

    注意开头的插入符号。您的第一个解决方案不是太贪心,而是找到两个字符串并替换它们。

    【讨论】:

      猜你喜欢
      • 2011-07-14
      • 2012-03-16
      • 1970-01-01
      • 2018-02-01
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      相关资源
      最近更新 更多