R 在整个除沫器上拆分,但不拆分除沫器的每个部件

R 在整个除沫器上拆分,但不拆分除沫器的每个部件,r,regex,R,Regex,我想分开一根绳子,并保持在它被分开的地方 str = 'Glenn: $53 Sutter: $44' strsplit(str, '[0-9]\\s+[A-Z]', perl = TRUE) # [[1]] # [1] "Glenn: $5" "utter: $44" ## taking out what was matched strsplit(str, '(?=[0-9]\\s+[A-Z])', perl = TRUE) # [[1]] # [1] "Glenn: $5" "3

我想分开一根绳子,并保持在它被分开的地方

str = 'Glenn: $53  Sutter: $44'
strsplit(str, '[0-9]\\s+[A-Z]', perl = TRUE)
# [[1]]
# [1] "Glenn: $5"  "utter: $44" ## taking out what was matched
strsplit(str, '(?=[0-9]\\s+[A-Z])', perl = TRUE)
# [[1]]
# [1] "Glenn: $5"     "3"             "  Sutter: $44" ## splitting at each component of the match
有没有办法在整个除沫器上分开?因此它返回:

# [1] "Glenn: $53"  "Sutter: $44"

我们可以使用regex lookaround在大写字母前和数字后拆分一个或多个空格(
\\s+

strsplit(str, "(?<=[0-9])\\s+(?=[A-Z])", perl = TRUE)[[1]]
#[1] "Glenn: $53"  "Sutter: $44"

strsplit(str,”(?我的理解是,您希望在字符串后面的空格上拆分,字符串由一个美元符号后跟一个或多个数字组成,前提是空格后跟一个字母

通过设置
perl=true
,您将使用perl的正则表达式引擎,它支持
\K
,这实际上意味着放弃迄今为止匹配的所有内容。因此,您可以使用以下正则表达式(设置大小写无关标志):


在某些情况下,如此处所示,
\K
可以用作可变长度lookbehind的替代品。唉,大多数正则表达式引擎,包括Perl,都不支持可变长度lookbehind。

考虑到您尚未给出或甚至定义我在回答中对你的问题的解释正确吗?
\$\d+\K\s+(?=[a-z])