我正在尝试使用 来检测字符串是否包含特定模式str_detect。我的图案是一系列“....” - 确切的点数未知。我正在尝试使用str_detect如下......
然而,在这种特殊情况下,str_detect返回 TRUE。想知道我在哪里做错了,是否str_detect是正确使用的函数?希望这里有人可以提供帮助吗?
library(stringr)
dot_pat="\\.........................";
str="The primary.objective is of the study."
str_detect(str,dot_pat)
Run Code Online (Sandbox Code Playgroud)
这将返回 TRUE。我期待 FALSE,因为其中的点str不遵循模式。
预先感谢,西马克
我有一列包含以下格式的尺寸字符串:
41 1/4 x 29 3/8" (104.8 x 74.6 厘米)
7'1" x 31" (216 x 78.8 厘米)
6'6 3/4" x 6'6 3/4" (200 x 200 厘米)
如何将高度和宽度(以厘米为单位)提取到单独的列中?我想使用stringr和dplyr。
border-color:#002449;left:74.4%top;37%;我想从这个字符串中将第一个百分比设为74.4%名为 的变量X,将第二个百分比37%设为名为 的变量Y。
我尝试使用这个正则表达式,"^.*?(\\d+)%.*"但这会取出%符号并只提取第二4个74.4
任何帮助将不胜感激。如果需要任何进一步的信息,请告诉我。
使用 R 语言。它表示意外的方括号和圆括号标记。该模式似乎也有效。我在这里做错了什么?
if (str_detect(c("Hello 241", "Whawt 602"), [0-9])) {
print("Oh no!")
} else {
print("Yay!")
}
Run Code Online (Sandbox Code Playgroud)
答案:“正则表达式周围没有引号”:它只检查第一个元素。如何检查向量中的所有元素?
假设我想提取字母a和之间的所有字母c。到目前为止,我一直在使用这个stringr软件包,它可以清楚地了解完整的比赛和分组。例如,该包将给出以下内容。
library(stringr)
str_match_all("abc", "a([a-z])c")
# [[1]]
# [,1] [,2]
# [1,] "abc" "b"
Run Code Online (Sandbox Code Playgroud)
假设我只想替换该组,而不是完整的匹配项——在本例中为字母b. 然而,以下内容将取代完整的匹配。
str_replace_all("abc", "a([a-z])c", "z")
[1] "z"
# Desired result: "azc"
Run Code Online (Sandbox Code Playgroud)
有什么好的方法可以只替换捕获组吗?假设我想做多场比赛。
str_match_all("abcdef", "a([a-z])c|d([a-z])f")
# [[1]]
# [,1] [,2] [,3]
# [1,] "abc" "b" NA
# [2,] "def" NA "e"
str_replace_all("abcdef", "a([a-z])c|d([a-z])f", "z")
# [1] "zz"
# Desired result: "azcdzf"
Run Code Online (Sandbox Code Playgroud)
匹配组很容易,但是当需要替换时我还没有找到解决方案。
我想提取“/”符号后的倒数第二个字符串。例如,
url<- c('https://example.com/names/ani/digitalcod-org','https://example.com/names/bmc/ambulancecod.org' )
df<- data.frame (url)
Run Code Online (Sandbox Code Playgroud)
我想从两者之间的最后一个单词中提取第二个单词 // 并希望获取单词“ani”和“bmc”
所以,我尝试了这个
library(stringr)
df$name<- word(df$url,-2)
Run Code Online (Sandbox Code Playgroud)
我需要输出如下:
name
ani
bmc
Run Code Online (Sandbox Code Playgroud) 我想知道一个字符串以多少个空格开头。这里有些例子:
string.1 <- " starts with 4 spaces"
string.2 <- " starts with only 2 spaces"
Run Code Online (Sandbox Code Playgroud)
我的尝试如下,但这两种情况都导致 1,我明白为什么会出现这种情况。
stringr::str_count(string.1, "^ ")
stringr::str_count(string.2, "^ ")
Run Code Online (Sandbox Code Playgroud)
我更希望有一个完全像这样但使用另一个正则表达式的解决方案。
我有一个用户数据框,其中一列包含他们自我报告的位置。因此,报告的某些位置是无意义的,但在将此列与已知位置的其他列匹配时可能会导致误报。以下是数据框的示例。
data <- data.frame(X = (1:5), Y = c("", "Washington, DC", "Huntsville, AL", "Mobile,AL", "ALL OVER"))
Run Code Online (Sandbox Code Playgroud)
有了这些数据,我然后运行下面的代码来建立与AL.
library(stringr)
data$match_ab <- str_extract(data[,2], str_c("AL", collapse = "|"))
Run Code Online (Sandbox Code Playgroud)
这导致 Huntsville 和 Mobile 被正确识别为正数,但ALL OVER由于AL字符串内的,第三个匹配项错误地识别为匹配项。
有没有办法调整这个脚本,以便它检测string s 中的匹配项,同时忽略将字母附加到字符串所需部分的字符串?换句话说,AL如果字母与字符串相邻,这是否可以检测到部分字符串的两侧可能有空格或标点符号而忽略匹配项?
提前致谢。
我有一个看起来像这样的数据框:
mydf <- data.frame(
x = 1:3,
y = c('apples; pears', 'oranges; bananas; grapes', 'apples')
)
mydf
x y
1 1 apples; pears
2 2 oranges; bananas; grapes
3 3 apples
Run Code Online (Sandbox Code Playgroud)
我想要一个新变量 z 中的水果数量。期望的结果:
mydf
x y z
1 1 apples; pears 2
2 2 oranges; bananas; grapes 3
3 3 apples 1
Run Code Online (Sandbox Code Playgroud)
尝试过:
mydf %>% mutate(z = str_split(y, ';') %>% length) # gives '3' for all fields
Run Code Online (Sandbox Code Playgroud)
如何通过分割某个字符(在本例中为“;”)来获取字符串中的字符串计数?
test.dat <- c("abcde", "abcXe", "abcdY", "abcXY", "abYcXY", "abcYX")
test.want <- c("abcde", "abc1Xe", "abcd1Y", "abc1XY", "abYc1XY", "abcY1X")
Run Code Online (Sandbox Code Playgroud)
假设我希望在“X”或“Y”之前添加“1”,并且如果“X”和“Y”都存在,则仅在“X”之前添加“ 1”。
library(tidyverse)
case_when(
str_detect(test.dat, "X") ~ str_replace(test.dat, "X", "1X"),
str_detect(test.dat, "Y") ~ str_replace(test.dat, "Y", "1Y"),
TRUE ~ as.character(test.dat)
)
Run Code Online (Sandbox Code Playgroud)
这是可行的,但是有没有更好的方法以简洁的方式做到这一点?也许是单人str_replace?
如果是“X”或“Y”(以先到者为准),第二种情况怎么样?
test.dat <- c("abcde", "abcXe", "abcdY", "abcXY", "abYcXY", "abcYX")
test.want <- c("abcde", "abc1Xe", "abcd1Y", "abc1XY", "ab1YcXY", "abc1YX")
Run Code Online (Sandbox Code Playgroud)
stringr 是更好的选择,但我欢迎任何其他方法。谢谢。