gpt4 book ai didi

R正则表达式匹配直到最后一个点

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

我正在尝试为 R 中的正则表达式创建一个模式。我希望该模式如下所示,

file1 <- "example.txt"
file2 <- "example.ffe.2f2.csv"
files <- c(file1,file2)

#pattern that matches everything up to, but not including last .

pattern <- ".*(?=\.)"
m <- regexpr(pattern, files)

但是我在模式行上收到错误消息

Error: '\.' is an unrecognized escape in character string starting "".*(?=\."

我希望正则表达式匹配 file1 中的 examplefile2 中的 example.ffe.2f2。我做错了什么建议/事情吗?它在 regex101.com 上正常工作,所以我知道模式是正确的。

最佳答案

(?=\.) 是一个正数 lookahead 。 TRE 正则表达式风格(如果未指定 perl=TRUE,则默认使用)不支持先行。您必须使用 PCRE 正则表达式引擎来处理此类模式。

要正确转义 .,使用文字 \,thr \ 符号必须在 R 字符串文字中加倍。但是,您可以通过将 . 放入括号表达式/字符类 - [.].

来避免这种情况

您可以使用以下代码:

file1 <- "example.txt"
file2 <- "example.ffe.2f2.csv"
files <- c(file1,file2)
regmatches(files, regexpr(".*(?=[.])", files, perl=TRUE))
## => [1] "example" "example.ffe.2f2"

参见 online R demo .

请注意,使用

可以获得相同的结果
tools::file_path_sans_ext(files)

获取不带扩展名的文件名 ( demo )。

关于R正则表达式匹配直到最后一个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44700506/

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