![](/img/trans.png)
[英]R/Stringr Extract String after nth occurrence of "_" and end with first occurrence of "_"
[英]match after nth occurrence in R stringr
如何在管道的第n次和第n + 1次匹配中匹配事物?
我想在字符串abc|def|ghi|jkl
中匹配ghi
。
我最好的尝试是
str_match_all('abc|def|ghi|jkl', '((?<=\\|)[^|]*)')[2,1]
但这有点效率低下,因为它比我需要的要匹配的多,然后在R中将其削减到第二个匹配。 我想知道是否有更多的正则表达式可以只参加第n个比赛。
您可以使用
str_extract(x, "(?<=\\|)[^|]+(?=\\|[^|]+$)")
regmatches(x, regexpr("(?<=\\|)[^|]+(?=\\|[^|]+$)", x, perl=TRUE))
sub(".*\\|([^|]+)\\|[^|]+$", "\\1", x)
参见regex演示 ( str_match
/ regmatches
)和另一个演示 ( sub
)。
细节
(?<=\\\\|)
-确保有一个|
char立即位于当前位置的左侧 [^|]+
-除|
以外的一个或多个字符 (?=\\\\|[^|]+$)
-当前位置的右侧,必须有一个|
char,然后除|
以外的任何0+字符 然后是字符串的结尾。 R:
library(stringr)
x <- "abc|def|ghi|jkl"
str_extract(x, "(?<=\\|)[^|]+(?=\\|[^|]+$)")
## => [1] "ghi"
regmatches(x, regexpr("(?<=\\|)[^|]+(?=\\|[^|]+$)", x, perl=TRUE))
## => [1] "ghi"
sub(".*\\|([^|]+)\\|[^|]+$", "\\1", x)
## => [1] "ghi"
您是否正在寻找这样的东西? 应该捕获管道之间的所有内容。
r"(?<=\|)[^\|]*(?=\|)"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.