r - 有没有人可以使用 R 解释基本正则表达式的结果?
问题描述
1.
test1
# [1] "abcd" "abc1" "ab2b" "a3cd" "4bcd"
test1[grep('[^abc1-3]', test1)]
# [1] "abcd" "a3cd" "4bcd"
test1[grep('[^a-d1-3]', test1)]
# [1] "4bcd"
test1[grep('[^4]', test1)]
# [1] "abcd" "abc1" "ab2b" "a3cd" "4bcd"
2.
test5 <- c('lo', 'lol', 'lolo', 'olo', 'lool')
test5[grep('loll*', test5)]
# [1] "lol" "lolo"
3.
test5
# [1] "lo" "lol" "lolo" "olo" "lool"
test5[grep('lolo+', test5)]
# [1] "lolo"
test5[grep('lol+', test5)]
# [1] "lol" "lolo"
我正在研究使用 R 的正则表达式的基本内容。但我不明白为什么上面三个示例会返回这些结果。
例如,当在 [] 中使用 ^ 时,我了解到它返回的字符不涉及 ^ 后面的字母。但结果似乎并非如此。
我不擅长英语,所以我很难解释各种我无法理解的事情,但如果有人能教我为什么这些 R 代码会返回这些结果,我将不胜感激。
:(
解决方案
您是正确的,"[^abc1-3]"
它将匹配不在 {a, b, c, 1, 2, 3} 中的任何字符。
grep
如果有任何匹配将返回 TRUE,如果没有匹配则返回 FALSE。
test1
# [1] "abcd" "abc1" "ab2b" "a3cd" "4bcd"
test1[grep('[^abc1-3]', test1)]
# [1] "abcd" "a3cd" "4bcd"
三个结果有d
,不在{a, b, c, 1, 2, 3}
,所以d
匹配(最后一个有4
,也匹配)。结果中没有的两个测试项,"abc1"
只有 "ab2b"
中的字符{a, b, c, 1, 2, 3}
,所以不匹配。
Regex101 是一个测试正则表达式并了解它们如何工作的好站点。这是这个例子:https ://regex101.com/r/CaxfCI/1
对于您的其他示例,
*
表示0 或更多。所以'loll*'
匹配lol
后跟 0 或更多l
。+
表示1 个或多个。所以'lol+'
匹配lo
后跟 1 或更多l
。
请注意,对于grep
,没有任何意义'loll*'
... 结果将与 for 相同'lol'
。但在其他正则表达式操作中,如果您要替换(替换)或提取匹配项,则差异可能很重要。
推荐阅读
- java - 无法在 Ubuntu 上启动 Eclipse 退出代码 = 13
- c# - 如何使用C#打乱句子中的单词并放入数组
- c++ - 编译器优化消除了错误共享的影响。如何?
- python - dis.dis(foo) 中字段的正式名称
- c# - CSharp 和 Golang 之间的 AES-CFB 实现不一致
- security - 创建一个从 Windows 系统到 Kali 机器的反向 shell - 其中一个是侦听器
- javascript - 无法捕获 Selenium NoSuchElementError (Javascript)
- php - 为什么不能用php将日期写入mysql?
- linux - 在 Linux 上连接和使用多个蓝牙加密狗?
- ionic-framework - ionicFramework 与 Xamarin.Forms