3

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

我如何使用 regex (not 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 regex 通常与 regex 不同

4

3 回答 3

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"
于 2013-04-09T14:06:11.487 回答
2

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

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

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

于 2013-04-09T14:13:30.120 回答
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"

于 2013-04-09T14:07:41.510 回答