gpt4 book ai didi

r - 在 R 中使用正则表达式提取子字符串

转载 作者:行者123 更新时间:2023-12-05 05:18:00 27 4
gpt4 key购买 nike

我是正则表达式的新手,已阅读 http://www.gastonsanchez.com/Handling_and_Processing_Strings_in_R.pdf正则表达式文件。我知道之前已经发布过类似的问题,但我仍然很难弄清楚我的情况。

我有一个字符串文件名向量,尝试提取子字符串,并另存为新文件名。文件名遵循以下模式:

\w_\w_(substring to extract)_\d_\d_Month_Date_Year_Hour_Min_Sec_(AM or PM)

例如,ABC_DG_MS-15-0452-268_206_281_12_1_2017_1_53_11_PM、ABC_RE_SP56-01_A_206_281_12_1_2017_1_52_34_AM,子字符串为MS-15-0452-268和SP56-01_A

我用过

map(strsplit(filenames, '_'),3)

但失败了,因为新文件名也可能有 _。

我求助于高级匹配的正则表达式,想出了这个

gsub("^[^\n]+_\\d_\\d_\\d_\\d_(AM | PM)$", "", filenames)

仍然没有得到我需要的。

最佳答案

你可以使用

filenames <- c('ABC_DG_MS-15-0452-268_206_281_12_1_2017_1_53_11_PM', 'ABC_RE_SP56-01_A_206_281_12_1_2017_1_52_34_AM')
gsub('^(?:[^_]+_){2}(.+?)_\\d+.*', '\\1', filenames)

哪个产量

[1] "MS-15-0452-268" "SP56-01_A"    


这里的模式是

^             # start of the string
(?:[^_]+_){2} # not _, twice
(.+?) # anything lazily afterwards
_\\d+ # until there's _\d+
.* # consume the rest of the string

此模式被第一个捕获的组和相关文件名所取代。

关于r - 在 R 中使用正则表达式提取子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48386452/

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