首页 > 解决方案 > 使用此特定模式“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 的两边都包含数字,但也可以包含特殊字符和数字。

标签: rregexpcreregex-lookarounds

解决方案


x除了至少存在一些数字之外,似乎对 两侧可能发生的事情没有真正的限制。所以我们可以用它[^ ]来匹配任何不是空格的东西:

grepl("[^ ]*\\d+[^ ]*x[^ ]*\\d+[^ ]*", x, perl = TRUE)

这给出了示例的预期输出,但我不能保证它适用于所有情况,除非您可以缩小限制范围。

正如 ikegami 建议的那样,如果您需要做的就是检测这些模式(而不是将它们从字符串中拉出),您可以将其简化为:

grepl("\\d[^ ]*x[^ ]*\\d", x, perl = TRUE)

根据您的输入,这可能会快很多,因为[^ ]*在正则表达式中可能会非常慢(搜索“正则表达式回溯”以获得概述)


推荐阅读