r - 什么正则表达式可以让我在单词之前或之后找到最接近单词的数字
问题描述
我有如下句子
"There is a 10cm length of Barrett's"
"The length of Barrett's is around 5 cm"
"The Barrett's measures 10cm in length above a 4cm hiatus hernia"
"The length of Barrett's is 5cm but the length of the dysplasia is 3cm"
我想提取 Barrett 的长度作为 ifelse 语句的一部分
ifelse(grepl("(\\.|^)(?=[^\\.]*cm)(?=[^\\.]*Barr)(?=[^\\.]*(of |length))[^\\.]*(\\.|$)",
dataframe[,EndoReportColumn], perl=TRUE,ignore.case = TRUE),
stringr::str_extract(stringr::str_match(dataframe[,EndoReportColumn],"(\\.|^)(?=[^\\.]*cm)(?=[^\\.]*[Bb]arr)[^\\.]*(\\.|$)"),"\\d"),"None Found")
我遇到的问题是,如果句子中有两个数字,则提取的数字不正确,因此我得到的句子结果是:
10
5
4
3
如何在包含单词长度和巴雷特的任何顺序的句子中获得最接近(在之前或之后)单词巴雷特的数字?
解决方案
试试这个正则表达式:
(\d+\s*\w+)[^\d\r\n]*Barret|[^\d\r\n]*Barret[^\d\r\n]*(\d+\s*\w+)
通过一些编程,您可以提取 Group 1/2 的内容。
注意:
此解决方案旨在保留提供的示例字符串。\
另外,每个人都逃脱\
。
(\\d+\\s*\\w+)[^\\d\\r\\n]*Barret|[^\\d\\r\\n]*Barret[^\\d\\r\\n]*(\\d+\\s*\\w+)
解释:
(\d+\s*\w+)
- 匹配 1+ 个数字,后跟 0+ 个空格,后跟 1+ 个单词字符,以匹配并捕获长度及其在组 1中的单位[^\d\r\n]*Barret
- 匹配 0+ 次出现的任何既不是换行符也不是回车符也不是数字后跟单词的字符Barret
|
- 或者[^\d\r\n]*Barret[^\d\r\n]*
- 匹配 0+ 次出现的任何字符,该字符既不是换行符也不是回车符,也不是单词后跟的数字Barret
。这之后再次出现 0+ 次出现的任何字符,这些字符既不是换行符也不是回车符,也不是后跟单词的数字Barret
。(\d+\s*\w+)
- 匹配 1+ 个数字,后跟 0+ 个空格,后跟 1+ 个单词字符,以匹配和捕获长度及其在第 2 组中的单位
推荐阅读
- python - 将计算量大的函数应用于 dask 数据帧的最有效方法?
- r - 修改 data.table 以仅包含一个变量的唯一值
- r - Shiny 在本地工作,但以奇怪的方式生产失败
- mysql - 在 MariaDB/MySQL 中,如何从单行返回的不同记录中检索同一列?
- ionic3 - Ionic3 发布事件抛出异常
- linux - SSHFS 上的 Setcap
- c# - Windows 10 上的 DataGridView 中的字体大小无效
- c# - c# winform项目中使用mysql计算datediff
- reporting-services - SSRS:在中间列分组级别以及行组内的位置矩阵单元
- bazel - Bazel -- 获取另一个目标宏的参数