在查看(R/StringR)中使用量词
我想从以下字符串中提取名称 john doe
:
str <- 'Name: | |John Doe |'
我可以做:
library(stringr)
str_extract(str,'(?<=Name: \\| \\|).*(?= \\|)')
[1] "John Doe"
但是,这涉及到很多空间,并且当未固定空间数量时,它效果不佳。但是,当我尝试使用量词(+
)时,我会收到一个错误:
str_extract(str,'(?<=Name: \\| +\\|).*(?= +\\|)')
Error in stri_extract_first_regex(string, pattern, opts_regex = opts(pattern)) :
Look-Behind pattern matches must have a bounded maximum length. (U_REGEX_LOOK_BEHIND_LIMIT, context=`(?<=Name: \| +\|).*(?= +\|)`)
其他变体也是如此:
str_extract(str,'(?<=Name: \\|\\s+\\|).*(?=\\s+\\|)')
str_extract(str,'(?<=Name: \\|\\s{1,}\\|).*(?=\\s{1,}\\|)')
是否有解决方案?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
怎么样:
首先,我们删除
名称
然后我们用空间代替所有特殊字符
最后
str_squish
它How about:
First we remove
Name
Then we replace all special characters with space
and finally
str_squish
it使用基本R的另一个解决方案:
Another solution using base R:
您也可以使用
\ k
将迄今为止与正则匹配的匹配保持匹配。说明
名称:\ |
match名称:|
\ h+ \ |
匹配1+空格和|
\ k
忘记到目前为止匹配的积极的lookahead,断言右侧的更多空间,然后是
|
请参阅a and a R demo.
示例
输出
You might also use the
\K
to keep what is matched so far out of the regex match.Explanation
Name: \|
matchName: |
\h+\|
Match 1+ spaces and|
\K
Forget what is matched so far.*?
Match as least as possible chars(?=\h+\|)
Positive lookahead, assert 1+ more spaces to the right followed by|
See a regex demo and a R demo.
Example
Output