r - 如何匹配不同的重复字符

标签 r regex

我试图在 R 中提出一个正则表达式来匹配重复两个不同字符的字符串。

x <- c("aaaaaaah" ,"aaaah","ahhhh","cooee","helloee","mmmm","noooo","ohhhh","oooaaah","ooooh","sshh","ummmmm","vroomm","whoopee","yippee")
此正则表达式匹配以上所有内容,包括诸如“mmmm”和“ohhhh”之类的字符串,其中第一次和第二次重复中的重复字母相同:
grep(".*([a-z])\\1.*([a-z])\\2", x, value = T)
我想匹配的内容 x这些字符串的重复字母是不同的:
"cooee","helloee","oooaaah","sshh","vroomm","whoopee","yippee"
如何调整正则表达式以确保第二个重复字符与第一个不同?

最佳答案

您可以使用 negative lookahead 限制第二个字符模式。 :

grep(".*([a-z])\\1.*(?!\\1)([a-z])\\2", x, value=TRUE, perl=TRUE)
#                    ^^^^^
regex demo .(?!\\1)([a-z])表示匹配并捕获与组 1 中的值不同的任何小写 ASCII 字母并将其捕获到组 2 中。
R demo :
x <- c("aaaaaaah" ,"aaaah","ahhhh","cooee","helloee","mmmm","noooo","ohhhh","oooaaah","ooooh","sshh","ummmmm","vroomm","whoopee","yippee")
grep(".*([a-z])\\1.*(?!\\1)([a-z])\\2", x, value=TRUE, perl=TRUE)
# => "cooee"   "helloee" "oooaaah" "sshh"    "vroomm"  "whoopee" "yippee" 

关于r - 如何匹配不同的重复字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62551649/

相关文章:

r - 将 R 中的矩阵转换为具有相应条目的上三角/下三角矩阵

Python - 使用正则表达式过滤数据

正则表达式空字符串或电子邮件

r - 如何将外部图像加载到 Shiny

java - 用于分隔文件行的正则表达式

Php 正则表达式,扫描文档以输出行和值

ruby - 什么是用于检查某些文本是否仅包含 URL 的正则表达式?

r - 在 R 中拆分包含多个分隔符的字符串

R:合并表格并用因子信息填充空单元格

r - 计算字符串开头有多少个空格