Regex 存在多个时提取第一个日期时间戳的正则表达式

Regex 存在多个时提取第一个日期时间戳的正则表达式,regex,r,Regex,R,给定一个带有多个日期时间戳的字符串,我想提取第一个戳及其前面的文本 候选字符串可以有一个或多个时间戳 后续日期时间戳将由sep=“-” 在随后的日期和时间戳之间可能有也可能没有文本,但肯定会有sep 日期和时间格式: 每个单独的印章可能包含也可能不包含时间(即仅包含日期) 如果戳记有时间,格式将为\u HHMM或\u hhmms 日期的格式始终为yyyyymmdd 库(stringr) 字符串用8位数字替换8位数字后的任何内容: # test data string <- c(

给定一个带有多个日期时间戳的字符串,我想提取第一个戳及其前面的文本

  • 候选字符串可以有一个或多个时间戳
  • 后续日期时间戳将由
    sep=“-”
  • 在随后的日期和时间戳之间可能有也可能没有文本,但肯定会有sep
日期和时间格式:

  • 每个单独的印章可能包含也可能不包含时间(即仅包含日期)
  • 如果戳记有时间,格式将为
    \u HHMM
    \u hhmms
  • 日期的格式始终为
    yyyyymmdd

库(stringr)

字符串用8位数字替换8位数字后的任何内容:

# test data
string  <- c("TEXT_etc_20140530-20140825_1635-",
   "TEXT_etc_20140530-diff_txet_20140825_1635-",
   "TEXT_etc_20140530_123456-diff_txet_20140825_1635-")

sub("(\\d{8}).*", "\\1", string)
## [1] "TEXT_etc_20140530" "TEXT_etc_20140530" "TEXT_etc_20140530"
更新添加了第二个解决方案并对其进行了更正。

这是一种方法:

pat <- '^(?U)(.*\\d{8}).*$'
gsub(pat, '\\1', string, perl=TRUE)
# [1] "TEXT_etc_20140530" "TEXT_etc_20140530" "TEXT_etc_20140530"
帕特怎么样

strings <- c("TEXT_etc_20140530-20140825_1635-",
    "TEXT_etc_20140530-diff_txet_20140825_1635-",
    "TEXT_etc_20140530_123456-diff_txet_20140825_1635-")

pat <- "^\\w*\\d{8}(_\\d{4,6})?"
str_extract(strings, pat=pat)
您也可以尝试:

 library(stringi)
 stri_extract_first_regex(string, "[^0-9]+\\d{8}")
 #[1] "TEXT_etc_20140530" "TEXT_etc_20140530" "TEXT_etc_20140530"

要提取时间,请执行以下操作:

 stri_extract_first_regex(string, "[^0-9]+\\d{8}(?:_[0-9]{4,6})?")
 #[1] "TEXT_etc_20140530"        "TEXT_etc_20140530"       
 #[3] "TEXT_etc_20140530_123456"


 #data 
 string  <- c("TEXT_etc_20140530-20140825_1635-",
"TEXT_etc_20140530-diff_txet_20140825_1635-",
"TEXT_etc_20140530_123456-diff_txet_20140825_1635-")
stri\u extract\u first\u regex(字符串“[^0-9]+\\d{8}(?:[0-9]{4,6}”))
#[1] “TEXT_etc_20140530”“TEXT_etc_20140530”
#[3] “文本_等_20140530_123456”
#资料

字符串是第一个时间戳之前的所有值,非数字?感谢所有人的多次回答。虽然省略了时间,但可能是我误解了时间,这是OP想要的。示例中没有包含时间,但如果要保留时间,请使用我刚才添加的第二个
[1] "TEXT_etc_20140530"      "TEXT_etc_20140530"     "TEXT_etc_20140530_123456"
 library(stringi)
 stri_extract_first_regex(string, "[^0-9]+\\d{8}")
 #[1] "TEXT_etc_20140530" "TEXT_etc_20140530" "TEXT_etc_20140530"
 str_extract(string, "[^0-9]+\\d{8}")
 #[1] "TEXT_etc_20140530" "TEXT_etc_20140530" "TEXT_etc_20140530"
 stri_extract_first_regex(string, "[^0-9]+\\d{8}(?:_[0-9]{4,6})?")
 #[1] "TEXT_etc_20140530"        "TEXT_etc_20140530"       
 #[3] "TEXT_etc_20140530_123456"


 #data 
 string  <- c("TEXT_etc_20140530-20140825_1635-",
"TEXT_etc_20140530-diff_txet_20140825_1635-",
"TEXT_etc_20140530_123456-diff_txet_20140825_1635-")