【发布时间】:2020-08-24 13:02:21
【问题描述】:
我遇到了正则表达式和 strsplit 的问题。我想根据第二个: 符号拆分以下x 字符串
x <- "26/11/19, 22:16 - Super Mario: It's a me: Super Mario!, but also : the princess"
然后获得类似的东西
"26/11/19, 22:16 - Super Mario"
" It's a me: Super Mario!, but also : the princess"
我正在使用 strsplit 和以下正则表达式,根据我的小知识,应该像 “只选择冒号符号后跟一个空格并且前面只有字母”.
我尝试使用 ? 符号使正则表达式不贪心,但显然我遗漏了一些东西,结果无法按预期工作,因为它在拆分操作中还包含 me:。
我认为有一个非贪婪的运算符很重要,因为这里的字符串只是一个例子,当然我并不总是有 Mario 这个词。
strsplit(x, "(?<=[[:alpha:]]):(?= )", perl = TRUE)
谢谢你!
【问题讨论】:
-
我很困惑。
Mario:中的冒号是第一个,而不是第二个冒号,后跟一个空格,前面是一个字母。请更准确地说明您的要求。 -
你总是有时间戳吗?
strsplit(x, '\\d.*?:.*?:\\K', perl = TRUE) -
你的意思是在第一个冒号上拆分,后面跟一个空格,前面是一个字母?
-
@rawr 我想你明白了!请添加它作为答案......如果我可以问,你能告诉我正则表达式吗?我得到(几乎)所有这些。非常感谢!
-
@SabDeM 我不相信它,它可能会在某些示例中崩溃。它匹配一个数字后跟两个冒号然后重置,所以如果第二个冒号后面有一个数字,它将不起作用。如果没有
\\d,它将在每两个冒号后拆分。我不知道足够的正则表达式来解决这个问题