R 两个字符组之间交替模式的正则表达式
我试图找到两个字符组(D\E和R\K\H)之间模式交替的匹配项 我提出的模式(通过阅读这里的其他帖子)是 将此模式与以下测试字符串一起使用:drk 我得到以下匹配项:DR,drd,RD 我要:DRE,drdr,RDK 匹配项缺少每组的最后一个字母R 两个字符组之间交替模式的正则表达式,r,regex,R,Regex,我试图找到两个字符组(D\E和R\K\H)之间模式交替的匹配项 我提出的模式(通过阅读这里的其他帖子)是 将此模式与以下测试字符串一起使用:drk 我得到以下匹配项:DR,drd,RD 我要:DRE,drdr,RDK 匹配项缺少每组的最后一个字母 请有人帮我找出原因。将第一组与第二组匹配,然后将第二组与所有匹配次数匹配,然后可能再匹配第一组。i、 e.([DE][RKH])+[DE]?,或与交换的组相同,即([RKH][DE])+[RKH]?或仅第一组,即[DE],或仅第二组,即[RKH]: l
请有人帮我找出原因。将第一组与第二组匹配,然后将第二组与所有匹配次数匹配,然后可能再匹配第一组。i、 e.
([DE][RKH])+[DE]?
,或与交换的组相同,即([RKH][DE])+[RKH]?
或仅第一组,即[DE]
,或仅第二组,即[RKH]
:
library(gsubfn)
x <- "DREDRDRDRARDK" # input
rx <- "(([DE][RKH])+[DE]?|([RKH][DE])+[RKH]?|[DE]|[RKH])"
strapply(x, rx)
## [[1]]
## [1] "DRE" "DRDRDR" "RDK"
库(gsubfn)
x将第一组和第二组的所有匹配次数匹配,然后可能再匹配第一组。i、 e.([DE][RKH])+[DE]?
,或与交换的组相同,即([RKH][DE])+[RKH]?
或仅第一组,即[DE]
,或仅第二组,即[RKH]
:
library(gsubfn)
x <- "DREDRDRDRARDK" # input
rx <- "(([DE][RKH])+[DE]?|([RKH][DE])+[RKH]?|[DE]|[RKH])"
strapply(x, rx)
## [[1]]
## [1] "DRE" "DRDRDR" "RDK"
库(gsubfn)
在您的模式中,重复匹配两个字符类中的一个字符,然后是一个肯定的前瞻,它断言应该有一个字符直接出现在右侧
(注意不应选择性地重复正向前瞻(?=[RKH])*
,否则它将始终为真,匹配太多)
如果前视后量词*
不存在,您将获得缺少字符的匹配项
匹配项缺少每个组的最后一个字母的原因是当匹配了[DE]
时,有一个正面的前瞻性断言直接在右边的是[RKH]
(另一种情况是由于交替)
- 它与
DRE
中的E
不匹配,因为在匹配E
时,在is之后的[RKH]
的先行断言为on,但事实并非如此
- 它与
drdrdrdr
中的最后一个R
不匹配,因为最后一个R
后面没有A
- 由于正向前瞻断言应该存在下一个字符,因此您也不匹配最后一个
K
,因为后面没有字符
如前所述,您可以重复匹配字符类对,然后可选地匹配后面的第一个字符类
如果没有这些小组,我认为也可以缩短为:
(?:[DE][RKH])+[DE]?|(?:[RKH][DE])+[RKH]?
输出
[[1]]
[1] "DRE" "DRDRDR" "RDK"
在您的模式中,重复匹配2个字符类中的单个字符,然后是一个肯定的前瞻,它断言应该有一个字符直接出现在右侧
(注意不应选择性地重复正向前瞻(?=[RKH])*
,否则它将始终为真,匹配太多)
如果前视后量词*
不存在,您将获得缺少字符的匹配项
匹配项缺少每个组的最后一个字母的原因是当匹配了[DE]
时,有一个正面的前瞻性断言直接在右边的是[RKH]
(另一种情况是由于交替)
- 它与
DRE
中的E
不匹配,因为在匹配E
时,在is之后的[RKH]
的先行断言为on,但事实并非如此
- 它与
drdrdrdr
中的最后一个R
不匹配,因为最后一个R
后面没有A
- 由于正向前瞻断言应该存在下一个字符,因此您也不匹配最后一个
K
,因为后面没有字符
如前所述,您可以重复匹配字符类对,然后可选地匹配后面的第一个字符类
如果没有这些小组,我认为也可以缩短为:
(?:[DE][RKH])+[DE]?|(?:[RKH][DE])+[RKH]?
输出
[[1]]
[1] "DRE" "DRDRDR" "RDK"
规则不清楚,你能补充更多的口头澄清吗?规则不清楚,你能补充更多的口头澄清吗?