给定一个包含多个日期时间戳的字符串,我想要提取第一个时间戳以及其之前的文本。
候选字符串可能有一个或多个时间戳。
后续的日期时间戳将用“sep =“ - ””分隔。
可能会有或没有在后续日期时间戳之间的文本,但一定会有一个sep。
日期时间格式:
每个单独的时间戳可能包含时间(即仅日期)。
如果时间戳包含时间,则格式将是_HHMM或_HHMMSS。
日期将始终是YYYYMMDD格式。
候选字符串可能有一个或多个时间戳。
后续的日期时间戳将用“sep =“ - ””分隔。
可能会有或没有在后续日期时间戳之间的文本,但一定会有一个sep。
日期时间格式:
每个单独的时间戳可能包含时间(即仅日期)。
如果时间戳包含时间,则格式将是_HHMM或_HHMMSS。
日期将始终是YYYYMMDD格式。
library(stringr)
string <- "TEXT_etc_20140530-20140825_1635-"
expected <- "TEXT_etc_20140530"
## using this pattern for the date_time stamp
## 8 digits, optional underscore with 4to6 digits, appearing exactly once, followed by "-"
. (\\d{8}(_\\d{4,6})?){1}- # I am not concerned with potential of a 5-digit time stamp
## Attempts
pat1 <- "(TEXT)(.*?)(\\d{8}(_\\d{4,6})?){1}-"; str_extract(string, pat=pat1)
pat2 <- "(\\d{8}(_\\d{4,6})?){1}-"; str_extract(string, pat=pat2) ## date is correct
pat3 <- "(.*?)(\\d{8}(_\\d{4,6})?){1}-"; str_extract(string, pat=pat3)
pat4 <- "(.*?)(\\d{8}){1}-" ; str_extract(string, pat=pat4)
## Other potential string patterns
string <- "TEXT_etc_20140530-diff_txet_20140825_1635-"
string <- "TEXT_etc_20140530_123456-diff_txet_20140825_1635-"
你能帮我找出正则表达式中的错误吗?
非R
用户请注意:在R
中,转义字符\
本身也需要转义,因此上面的代码中使用了\\