正则表达式需求:移除字符串中日期区间后的所有文本
移除日期区间后文本的正则解决方案
问题分析
你当前使用的正则表达式固定了日期间连字符的前后空格(\\-),但实际场景中日期区间的连字符可能前后无空格,导致匹配失效,无法正确移除后续文本。
修正后的正则表达式
针对R语言的gsub函数,可使用以下正则表达式:
gsub("((?:\\d{2}[A-Za-z]{3}\\d{2})\\s*-\\s*(?:\\d{2}[A-Za-z]{3}\\d{2})).*", "\\1", x)
效果验证
示例1(日期间连字符带空格):
输入:x = "AB - CEPC - Telephone_BAU_CPM_Link - 20Jan22 - 30Jan22 - Video Package - XXXX - Optimize"
输出:AB - CEPC - Telephone_BAU_CPM_Link - 20Jan22 - 30Jan22示例2(日期间连字符无空格):
输入:x = "AB - CEPC - Telephone_BAU_CPM_Link - 20Jan22-30Jan22 - Video Package - XXXX - Optimize"
输出:AB - CEPC - Telephone_BAU_CPM_Link - 20Jan22-30Jan22
正则说明
(?:\\d{2}[A-Za-z]{3}\\d{2}):非捕获组,匹配DDMonYY格式的日期(如20Jan22),其中\\d{2}匹配两位数字,[A-Za-z]{3}匹配月份缩写,\\d{2}匹配两位年份。\\s*-\\s*:匹配连字符,\\s*允许连字符前后有任意数量的空格(包括0个),兼容带空格和无空格的场景。((?:...)\\s*-\\s*(?:...)):捕获整个日期区间,替换时用\\1保留该区间内容。.*:匹配日期区间之后的所有文本,替换时将这部分内容移除。
内容的提问来源于stack exchange,提问作者Sankalp Srivastava
相关产品推荐
相关产品推荐

