regex - R:查找字符串中唯一字符的数量

标签 regex r

我希望在用户提供的数据集中找到真实的和伪造的身份号码(例如社会安全号码、电话号码等),因此很困惑。

某些用户故意输入虚假信息,例如“idk”、“fu”、123456 或 222222。

我可以很容易地过滤掉这些单词,但我想变得更花哨一点,捕获更多明显错误的信息。

从概念上讲,我想删除那些几乎每个数字都是唯一的、几乎每个数字都相同的数字。因此,像 2220222 和 123451 这样的数字将被删除。

这需要运行得相当快,并且不会占用大量内存,因此在每个条目上执行内部循环实际上并不可行。我希望/认为必须有一种聪明的方法来使用正则表达式来做到这一点。

这是我希望发生的事情的一个稻草:

filter.func(my.str.array, 2, 2)
### Returns a logical array of length "my.str.array" with "TRUE" meaning that
### it would not be filtered, and "FALSE" that a filtering rule was broken

### the "2" and "2" are, respectively:
### First "2":  the min # of acceptable non-unique values (e.g., to catch 123456)
### Second "2": the min # of acceptable non-duplicated values (to catch 222222)

谢谢!

最佳答案

这里我使用strsplit将单词分割成字符;然后我使用 table 来计算字符数。

filter.func<-function(x, mindup=2, mindiff=2) {
    spt<-lapply(strsplit(x,""), table)
    sapply(spt, function(x) {sum(x>1)>=mindup & sum(x>0)>=mindiff})
}

filter.func(c("22222","123456","234356"),2,2)
# [1] FALSE FALSE  TRUE

使用更多正值和负值进行测试可能会更好。

关于regex - R:查找字符串中唯一字符的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24048927/

相关文章:

r - 在 R 中创建函数时如何构造灵活的函数输入?

带有 Validators.pattern 的正则表达式仅用于整数

java - 检测文本中的电子邮件并用 <a> 标记将其包围

r - 使用RGoogleAnalytics查询自定义维度

R - 两个数据框列到键值对列表

r - 如何在r中的ggplot中绘制两个半圆

java - 允许特殊字符的正则表达式

Java:如何从正则表达式解析 double

使用自定义正则表达式替换 Java 字符串

r - 如何提取 R 中嵌套列表中与条目名称相对应的元素?