You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用R正则表达式匹配字符串首尾空格间的内容?

提取债券描述中的票面利率部分(R实现)

刚好碰到过类似的需求,给你分享两种在R里实现的方法,完美匹配你要的结果:

需求回顾

我们需要从格式如DBR 0 1/2 02/15/25、FRTR 3 04/25/22的债券描述字符串中,提取第一个空格与最后一个空格之间的内容,也就是债券的票面利率部分,预期输出为0 1/2、3、1.35。

实现步骤

1. 构造示例数据框

先模拟你提到的R数据框:

bond_df <- data.frame(
  bond_desc = c("DBR 0 1/2 02/15/25", "FRTR 3 04/25/22", "BTPS 1.35 04/15/22")
)

2. 方法一:基础R原生函数sub

利用正则表达式的捕获组功能,直接提取目标内容:

# 提取第一个空格后、最后一个空格前的内容
bond_df$coupon <- sub("^[^ ]+ (.*) \\d{2}/\\d{2}/\\d{2}$", "\\1", bond_df$bond_desc)

正则表达式解释:

  • ^[^ ]+:匹配字符串开头到第一个空格的国家代码部分
  • (.*):捕获组,匹配第一个空格后到最后一个空格前的所有内容(这就是我们要的利率)
  • \\d{2}/\\d{2}/\\d{2}$:匹配最后一个空格后的到期日格式(两位月/两位日/两位年)
  • \\1:将整个字符串替换为捕获组1的内容,也就是我们要提取的部分

3. 方法二:stringr包简化操作

如果你习惯用tidyverse系列工具,stringr的str_match会更直观:

library(stringr)
# 提取捕获组的内容
bond_df$coupon <- str_match(bond_df$bond_desc, "^[^ ]+ (.*) \\d{2}/\\d{2}/\\d{2}$")[, 2]

验证结果

运行上述代码后,bond_df$coupon列的输出就是:

[1] "0 1/2" "3"     "1.35"

完全符合预期~

扩展说明

如果你的到期日格式包含四位年份(比如02/15/2025),只需把正则中的\\d{2}改成\\d{2,4}即可适配:

# 适配两位/四位年份的到期日
bond_df$coupon <- sub("^[^ ]+ (.*) \\d{2}/\\d{2}/\\d{2,4}$", "\\1", bond_df$bond_desc)

内容的提问来源于stack exchange,提问作者RSX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:40:55