r - 使用此特定模式“digitsXdigits”在 R 中查找字符串
问题描述
我试图通过查找具有特定模式的字符串来清理字符串列表,但不知道如何编写正则表达式来查找它们。
我正在使用 grepl(),但不知道如何定义模式。
模式是数字,然后 [必须包括x,也许是特殊字符,字母],然后是数字。
Here are some examples: OUTPUT from grepl()
"kills kld ldks 2087x-2714" TRUE
"sdlsn dklsk 4.75x25" TRUE
"dkks klsdk 3x4x135" TRUE
"djnlsdkl250shd" FALSE
"kdls, skfndkl 24gx.75" TRUE
"ski lsdkcm lskd 12.6" FALSE
"klslc ksldml 3.0 dnjsl 67n030" FALSE
这是一个有点复杂的模式。基本上它必须在 x 的两边都包含数字,但也可以包含特殊字符和数字。
解决方案
x
除了至少存在一些数字之外,似乎对 两侧可能发生的事情没有真正的限制。所以我们可以用它[^ ]
来匹配任何不是空格的东西:
grepl("[^ ]*\\d+[^ ]*x[^ ]*\\d+[^ ]*", x, perl = TRUE)
这给出了示例的预期输出,但我不能保证它适用于所有情况,除非您可以缩小限制范围。
正如 ikegami 建议的那样,如果您需要做的就是检测这些模式(而不是将它们从字符串中拉出),您可以将其简化为:
grepl("\\d[^ ]*x[^ ]*\\d", x, perl = TRUE)
根据您的输入,这可能会快很多,因为[^ ]*
在正则表达式中可能会非常慢(搜索“正则表达式回溯”以获得概述)
推荐阅读
- python - 使用 order_by() 与查询分开
- django - 测试用例如何确定粒度?
- node.js - 根据日期(createdAt)表达猫鼬分页
- sap - SAP HANA | SAP HANA 中的批量插入
- apache-kafka - Kafka代理故障转移 - 当第一个节点关闭时消费者不工作
- ios - 在 iOS 12 中更改 UITabBarItem 徽章字体
- memory-leaks - C# - 将任何不安全的非托管类型转换为托管类型而无需任何新的内存分配 - 在内存中保持相同的大小
- android - 以花哨的方式使用 gson 和 retrofit2 解析 JSON 属性“数据”
- java - Firestore 模拟器在 Docker 中运行时无法启动
- java - 无法在 onTouch 事件中使用 setScaleX 和 setScaleY 调整视图大小和旋转视图