R中的正则表达式,匹配字符串

时间:2020-06-14 19:13:53

标签: r regex string

我有这样的字符串:“ X96HE6.10nMBI_1_2”,“ X96HE6.10nMBI_2_2”,“ X96HE6.10nMBI_3_2”,我只想在下划线之间匹配数字1、2和3,但不匹配它们(下划线)。我能想到的最好的解决方案是str_match(sample_names, "_+[1-3]?"),我将非常感谢您的帮助。

4 个答案:

答案 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
相关问题