解析 R 中字符串的数据
Parse Data of a String in R
我需要帮助来解决这个看似非常简单的问题。我有一个字符串,70 - 3/31/2014 - 60@1.66
。我只想解析出第二个“-”之间和“@”之前的信息,即“60”。 R中有没有公式或者嵌套公式可以解析出两个指定字符之间的字符串数据?
谢谢!
通过子,
> x <- "70 - 3/31/2014 - 60@1.66"
> sub("^[^-]*-[^-]*-\s*([^@]*)@.*", "\1", x)
[1] "60"
> sub("^[^-]*-[^-]*-([^@]*)@.*", "\1", x)
[1] " 60"
> sub("^(?:[^-]*-){2}\s*([^@]*)@.*", "\1", x)
[1] "60"
^
- 断言我们在开始。
[^-]*-
匹配除 -
之外的所有字符,零次或多次以及后面的连字符。
(?:[^-]*-){2}
- 上面的模式将重复两次。所以我们以第二个连字符结尾。
\s*
- 匹配零个或多个 space 个字符。
([^@]*)
- 捕获任何字符但不是 @
零次或多次。
.*
- 匹配所有剩余的字符。
因此,通过将所有匹配的字符替换为组索引 1 内的字符,将为您提供所需的输出。
或
> x <- "70 - 3/31/2014 - 60@1.66"
> m <- regexpr("^(?:[^-]*-){2}\s*\K[^@]*(?=@)", x, perl=TRUE)
> regmatches(x, m)
[1] "60"
\K
将到目前为止匹配的文本保留在整个正则表达式匹配之外。
1) sub 匹配整个字符串,然后用捕获组替换它,即匹配到括号中正则表达式部分的部分:
x <- "70 - 3/31/2014 - 60@1.66"
sub(".*- (.*)@.*", "\1", x)
## [1] "60"
这里是所用正则表达式的可视化:
.*- (.*)@.*
2) gsub 将想要的子串之前的部分和想要的子串之后的部分替换为空字符串:
gsub(".*- |@.*", "", x)
# [1] "60"
其正则表达式可以形象化为:
.*- |@.*
我需要帮助来解决这个看似非常简单的问题。我有一个字符串,70 - 3/31/2014 - 60@1.66
。我只想解析出第二个“-”之间和“@”之前的信息,即“60”。 R中有没有公式或者嵌套公式可以解析出两个指定字符之间的字符串数据?
谢谢!
通过子,
> x <- "70 - 3/31/2014 - 60@1.66"
> sub("^[^-]*-[^-]*-\s*([^@]*)@.*", "\1", x)
[1] "60"
> sub("^[^-]*-[^-]*-([^@]*)@.*", "\1", x)
[1] " 60"
> sub("^(?:[^-]*-){2}\s*([^@]*)@.*", "\1", x)
[1] "60"
^
- 断言我们在开始。[^-]*-
匹配除-
之外的所有字符,零次或多次以及后面的连字符。(?:[^-]*-){2}
- 上面的模式将重复两次。所以我们以第二个连字符结尾。\s*
- 匹配零个或多个 space 个字符。([^@]*)
- 捕获任何字符但不是@
零次或多次。.*
- 匹配所有剩余的字符。
因此,通过将所有匹配的字符替换为组索引 1 内的字符,将为您提供所需的输出。
或
> x <- "70 - 3/31/2014 - 60@1.66"
> m <- regexpr("^(?:[^-]*-){2}\s*\K[^@]*(?=@)", x, perl=TRUE)
> regmatches(x, m)
[1] "60"
\K
将到目前为止匹配的文本保留在整个正则表达式匹配之外。
1) sub 匹配整个字符串,然后用捕获组替换它,即匹配到括号中正则表达式部分的部分:
x <- "70 - 3/31/2014 - 60@1.66"
sub(".*- (.*)@.*", "\1", x)
## [1] "60"
这里是所用正则表达式的可视化:
.*- (.*)@.*
2) gsub 将想要的子串之前的部分和想要的子串之后的部分替换为空字符串:
gsub(".*- |@.*", "", x)
# [1] "60"
其正则表达式可以形象化为:
.*- |@.*