我正在尝试使用我为 Python 制作的一些正则表达式也适用于 R。
这是我在 Python 中所拥有的(使用出色的re
模块),以及我预期的 3 个匹配项:
import re
line = 'VARIABLES = "First [T]" "Second [L]" "Third [1/T]"'
re.findall('"(.*?)"', line)
# ['First [T]', 'Second [L]', 'Third [1/T]']
现在有了 R,这是我最好的尝试:
line <- 'VARIABLES = "First [T]" "Second [L]" "Third [1/T]"'
m <- gregexpr('"(.*?)"', line)
regmatches(line, m)[[1]]
# [1] "\"First [T]\"" "\"Second [L]\"" "\"Third [1/T]\""
为什么 R 匹配整个模式,而不仅仅是在括号内?我期待:
[1] "First [T]" "Second [L]" "Third [1/T]"
此外,perl=TRUE
没有任何区别。假设 R 的正则表达式不考虑仅匹配括号是否安全,或者我是否缺少一些技巧?
解决方案摘要:感谢@flodel,它似乎也适用于其他模式,因此它似乎是一个很好的通用解决方案。使用输入字符串line
和正则表达式模式的解决方案的紧凑形式pat
是:
pat <- '"(.*?)"'
sub(pat, "\\1", regmatches(line, gregexpr(pat, line))[[1]])
此外,perl=TRUE
如果gregexpr
在pat
.