我有一些字符串
string <- "Shakira - Wolf - 02.Hips don't lie.mp3"
我只想要第一部分,所以艺术家的名字。我像这样使用正则表达式
stri_extract_all_regex(string, "^.*?-")
输出:"Shakira -"
。但我不想" -"
。如何编写正则表达式,允许我只占用第一个" -"
之前的子字符串?
答案 0 :(得分:5)
我认为你只需要(不使用外部包)
sub(" -.*", "", string)
## [1] "Shakira"
<强>解释强>
这简单地匹配" -"
及其之后的所有内容,直到字符串结尾并将其替换为空。这基本上让你在第一个" -"
如果您坚持使用stringi
包(速度),可以使用stri_extract_first
和
stri_extract_first(string, regex = "[A-Za-z]+")
## [1] "Shakira"
答案 1 :(得分:4)
否定的字符类方法成功:
> stri_extract_all_regex(string, "^[^-]+")
[[1]]
[1] "Shakira "
其他大卫的挑战我现在尝试仅选择字母字符之间的空格,但也使用该功能,因此使用&#34;肯定&#34;选择策略:
string <- "Shakira and Friends - Wolf - 02.Hips don't lie.mp3"
stri_extract_all_regex(string, "^[[:alpha:]]+( *[[:alpha:]])*")
[[1]]
[1] "Shakira and Friends"
答案 2 :(得分:2)
如何使用strsplit
?
strsplit(string, split = " -")[[1]][1]
答案 3 :(得分:0)
使用rex可能会使这类任务变得更简单。
string <- "Shakira - Wolf - 02.Hips don't lie.mp3"
library(rex)
re_matches(string,
rex(capture(zero_or_more(any, type='lazy')), spaces, "-"))$'1'
#> [1] "Shakira"