一件非常重要的事情是了解如何使用regex在线测试仪:如果您在那里看到一些东西,并不意味着它在您的目标环境中也能工作。因为您正在使用
stringr
函数,您必须确保模式与ICU引擎兼容,而regex101仅支持PCRE、JS、Python
re
还有regex引擎。注意如果你使用
(g)sub
您必须确保regex与TRE regex引擎或PCRE兼容(添加时
perl=TRUE
)。
现在,您需要提取2个值,这意味着您需要使用2
str_extract
或
sub
呼叫。
A.
stringr公司
方法:
1) "(?<=I\\(pmax\\(0, )[a-z]+" # or
"(?<=I\\(pmax\\(0,\\s{0,10})[a-z]+"
2) "\\d+(?=\\)\\))"
这里的要点是环顾四周:
(?<=I\\(pmax\\(0, )
匹配项
I(pmax(0,
紧靠当前位置的左侧,但不会将匹配的文本放入匹配值中。这个
(?=\\)\\))
模式是一种积极的前瞻,需要
))
立即位于当前位置的右侧。
请注意,第一个regex的第二个版本在regex101上不起作用。com,因为lookbehind模式在这里是受限制的宽度,而不是固定的宽度。
A.
子系统
进近(TRE regex):
1) sub("I\\(pmax\\(\\d+,\\s*([a-z]+)\\s*-\\s*\\d+\\)\\)","\\1", term)
2) sub("I\\(pmax\\(\\d+,\\s*[a-z]+\\s*-\\s*(\\d+)\\)\\)","\\1", term)
这里的重点是匹配整个字符串,捕获所需内容,并替换为该组的占位符,
\1
。