正则表达式从第一个字符到字符串的结尾

时间:2013-04-09 13:47:33

标签: regex r

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正则表达式与一般的正则表达式

不同

3 个答案:

答案 0 :(得分:4)

尝试:

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"

答案 1 :(得分:2)

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

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

注意开头的插入符号。你的第一个解决方案并不是太贪心,但发现了两个字符串并取而代之。

答案 2 :(得分:1)

尝试以下

  

DOB       [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”