r - 正则表达式用于提取两个数字之间和结束模式
问题描述
我需要在某些条件下提取两个数字:累积起来,第一个数字后面必须跟 a /A
,并且第二个数字后面必须跟 a B
。例如:
30A/305B
: 30 和 305 都必须返回;30/305B
: 30 和 305 都不会返回;30A/305
: 30 和 305 都不会返回;
按照这里,我尝试了下面的正则表达式但没有成功:
(\d+(?=A\/))(\d+(?=B))
我该如何完成?我正在使用 R ,带有选项perl = TRUE
。
解决方案
该模式(\d+(?=A\/))(\d+(?=B))
匹配 1 个或多个数字,并A/
直接在左侧断言(不匹配)。
第一个断言将是正确的,但在此断言之后有第二部分以再次匹配 1 个或多个数字开始。
那是行不通的,因为前面的断言只是断言存在A/
您不需要任何环视或 perl = TRUE,您可以使用 2 个捕获组来代替:
(\d+)A/(\d+)B
str <- "30A/305B: both 30 and 305 must be returned;"
str_match(str, "(\\d+)A/(\\d+)B")
输出
[,1] [,2] [,3]
[1,] "30A/305B" "30" "305"
推荐阅读
- node.js - 如何在 DialogFlow 中接收 Kommunicate 发送的数据?
- javascript - CSS 将 div 置于绝对 div 之下
- ios - 框架没有正确更新 UICollectionView 作为 UITableViewCell 子视图
- android - Android底部导航本地化
- html - 如何在我的 GitHub Pages 站点上创建子域?
- php - PHP电子邮件表单主题人口数组只工作了一半
- laravel - Laravel Eloquent 关系插入/更新最佳实践
- javascript - 十六进制到浮点数 - 中小字节序 (CDAB) 和十六进制到 (UINT32 - 大字节序 (ABCD))
- oracle - 什么是使用key从redis快速获取数据或使用主键从oracle单表获取数据
- javascript - 在 Angular8 中每次单击时始终只显示三个级别的 highchart Sunburst