r-为什么这个正则表达式与十进制数不匹配


([.[:digit:]]+)

我认为这应该匹配像25.8或0.6这样的十进制数字…,但它似乎在"处放弃了;非数字";比赛的一部分。。。所以我只得到25或0

我试图逃离"带有\。和我在R中使用gregexpr((来执行此操作。

这里有一个最小的可复制示例:

test
[1] "  UNITSn  LAB             6690-2(LOINC) WBC # Bld Auto 10.99       "
LABregexlabname
[1] "LAB[[:print:][:blank:]]+WBC[[:print:][:blank:]]+([\.[:digit:]]+)[:blank:]*?"
> gregexpr( LABregexlabname, test)
[[1]]
[1] 11
attr(,"match.length")
[1] 46
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE
substring( test, 11, 11+46)
[1] "LAB             6690-2(LOINC) WBC # Bld Auto 10"

将最后一个[:blank:]作为[[:blank:]]放在[]内,然后使用perl=TRUE

test <- "  UNITSn  LAB             6690-2(LOINC) WBC # Bld Auto 10.99       "
LABregexlabname <- "LAB[[:print:][:blank:]]+WBC[[:print:][:blank:]]+([.[:digit:]]+)[[:blank:]]*?"
regmatches(test, regexpr(LABregexlabname, test, perl=TRUE))
#[1] "LAB             6690-2(LOINC) WBC # Bld Auto 10.99"

看起来TRE在末尾使用?时处处使用最小匹配。在这种情况下,当移除?时,TRE也将给出整数,但也给出所有空格。那么也许也要离开[[:blank:]]*

LABregexlabname <- "LAB[[:print:][:blank:]]+WBC[[:print:][:blank:]]+([.[:digit:]]+)[[:blank:]]*"
regmatches(test, regexpr(LABregexlabname, test))
#[1] "LAB             6690-2(LOINC) WBC # Bld Auto 10.99       "
LABregexlabname <- "LAB[[:print:][:blank:]]+WBC[[:print:][:blank:]]+([.[:digit:]]+)"
regmatches(test, regexpr(LABregexlabname, test))
#[1] "LAB             6690-2(LOINC) WBC # Bld Auto 10.99"

最新更新