s <- "YXABCDXABCDYX"
我想使用正则表达式返回ABCDABCD
,即中心"X"
每侧有4个字符,但不包括"X"
。
请注意,"X"
始终位于中心,每侧有6个字母。
我可以找到中心模式,例如"[A-Z]{4}X[A-Z]{4}"
,但我可以以某种方式让返回成为"([A-Z]{4})(X)([A-Z]{4})"
中的第一和第三组吗?
答案 0 :(得分:6)
您的正则表达式"([A-Z]{4})(X)([A-Z]{4})"
与您的字符串不匹配,因为您在第一个捕获组([A-Z]{4})
之前有字符,因此您可以添加.*
以匹配任何字符({{1 }} 0次或更多次(.
),直到你的第一个捕获组。
您可以使用*
引用gsub
中的组,其中n是第n个捕获组
\\n
基本上匹配整个字符串,并将其替换为第1组和第3组中捕获的内容并将其粘贴在一起。
另一种方法是使用不区分大小写匹配的s <- "YXABCDXABCDYX"
gsub('.*([A-Z]{4})(X)([A-Z]{4}).*', '\\1\\3', s)
# [1] "ABCDABCD"
以及(?i)
或[a-z]
\\w
或gsub('(?i).*(\\w{4})(x)(\\w{4}).*', '\\1\\3', s)
# [1] "ABCDABCD"
如果你喜欢点