我有这样的字符串:“ X96HE6.10nMBI_1_2”,“ X96HE6.10nMBI_2_2”,“ X96HE6.10nMBI_3_2”,我只想在下划线之间匹配数字1、2和3,但不匹配它们(下划线)。我能想到的最好的解决方案是str_match(sample_names, "_+[1-3]?")
,我将非常感谢您的帮助。
答案 0 :(得分:2)
最简单的方法是使用sub
和向后引用:
数据:
d <- c("X96HE6.10nMBI_1_2", "X96HE6.10nMBI_2_2", "X96HE6.10nMBI_3_2")
解决方案:
sub(".*_(\\d)_.*", "\\1", d)
在这里,(\\d)
为单个数字定义了捕获组(如果所讨论的数字可能超过一个数字,请使用\\d+
),该反向引用“ {{1}”会对其进行“调用” } \\1
的替换参数中
或者使用sub
和积极的环顾四周:
str_extract
library(stringr)
str_extract(d, "(?<=_)\\d(?=_)")
是正向后方的,可以掩饰为“如果您在左侧看到(?<=_)
...”
_
是要匹配的数字
\\d
是积极的前瞻,可以将其修饰为“如果您在右侧看到(?=_)
...”
结果:
_
答案 1 :(得分:1)
您可以使用Look Arounds,我个人非常依赖于此类正则表达式的Stringing Cheatsheets,语法有点难以记住,这是rstudio page for Cheatsheets查找stringr-> LOOK AROUNDS
library(tidyverse)
codes <- c("X96HE6.10nMBI_1_2", "X96HE6.10nMBI_2_2", "X96HE6.10nMBI_3_2")
codes %>%
str_extract("(?<=_)[:digit:]+(?=_)")
#> [1] "1" "2" "3"
由reprex package(v0.3.0)于2020-06-14创建
答案 2 :(得分:1)
不需要任何第三方模块:
strings <- c("X96HE6.10nMBI_1_2", "X96HE6.10nMBI_2_2", "X96HE6.10nMBI_3_2")
pattern <- "(?<=_)(\\d+)(?=_)"
unlist(regmatches(strings, gregexpr(pattern, strings, perl = TRUE)))
哪个产量:
[1] "1" "2" "3"
答案 3 :(得分:1)
在末尾的注释中使用function LogoTitle() {
return (
<Image
style={{ width: 50, height: 50 }}
source={require('@expo/snack-static/react-native-logo.png')}
/>
);
}
function StackScreen() {
return (
<Stack.Navigator>
<Stack.Screen
name="Home"
component={HomeScreen}
options={{ headerTitle: props => <LogoTitle {...props} /> }}
/>
</Stack.Navigator>
);
}
,使用x
进行阅读,然后选择第二个字段。不使用包或正则表达式。
read.table
read.table(text = x, sep = "_")[[2]]
## [1] 1 2 3