str_match(txt, "([a-zA-Z]*)([0-9].*)") -6ren">
gpt4 book ai didi

R "eats"字符串中的正则表达式

转载 作者:行者123 更新时间:2023-12-02 09:29:03 27 4
gpt4 key购买 nike

我想将一个字符串分成两组。该字符串的结构非常简单,但我无法使其工作。

txt <- "text12-01-2016"

它总是一些字母,后面跟着一个日期,而日期显然以数字开头。我已经在 https://regex101.com/ 尝试了以下正则表达式并有效地正确分隔字符串:

([a-zA-Z]*)([0-9].*)
1. "text"
2. "12-01-2016"

但是当我在 R 中尝试时,它失败了:

strsplit(a[1],split = "([a-zA-Z]*)([0-9]*)")
[[1]]
[1] "" " " "" "." " " "" " " "" "-" "" "-" ""

如果我引入双方括号,那么它会“吃掉”第一组的最后一个字符以及第二组的第一个字符:

strsplit(txt,split = "([[a-zA-Z]]*)([[0-9]]*)")
[[1]]
[1] "tex" "2-01-2016"

我是否使用perl=TRUE并不重要。如果我使用 stringi::stri_split ,结果也是一致的,所以这是我的正则表达式中的问题。

在这种情况下使用的正确正则表达式是什么?

最佳答案

这里的“问题”是您有一个用于匹配的正则表达式,而不是分割

您可以使用following PCRE regexstrsplit:

strsplit(txt,split = "(?<=[a-zA-Z])(?=[0-9])", perl=T)
[[1]]
[1] "text" "12-01-2016"

正则表达式将匹配字母和数字之间的位置,strsplit 将分割结果。如果需要,您可以进一步取消列出它。

如果您想使用正则表达式,请使用 str_match来自stringr:

> library(stringr)
>str_match(txt, "([a-zA-Z]*)([0-9].*)")
[,1] [,2] [,3]
[1,] "text12-01-2016" "text" "12-01-2016"

关于R "eats"字符串中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34935347/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com