按模式R的第一个实例拆分字符串

按模式R的第一个实例拆分字符串,r,R,我有一根绳子 string <- "You know that song Mary had a little lamb? Mary is my friend." 我想在“玛丽”一词的开头就把它分开 更接近我的实际问题,假设我有以下字符串: string <- "Name: Mary Some stuff about Mary goes here, for a page Name: Mary The

我有一根绳子

string <- "You know that song Mary had a little lamb? Mary is my friend."
我想在“玛丽”一词的开头就把它分开

更接近我的实际问题,假设我有以下字符串:

string <- "Name:      Mary
           Some stuff about Mary goes here, for a page
           Name:      Mary
           There's more stuff about her.
           Name:      Sue
           Now the name is different. I want to split on Sue here.
           Name:      Sue
           Sue appears again, but because the name is Sue again I don't want to splt.
           Name:      Beth
           The name changed again, so I want to split on Beth above (following Name: ).
           Name:      Amy
           The name changed again and now I want to split on the 'Amy' immediately following Name: ."
试试这个:

regmatches(string, regexpr("Mary", string), invert = TRUE) 
试试这个:

regmatches(string, regexpr("Mary", string), invert = TRUE) 
这有帮助吗

strsplit(string, '(\\b\\S+\\b)(?=.*\\b\\1\\b.*)', perl=TRUE)[[1]]
##[1] "You know that song "                   
#[2] " had a little lamb? Mary is my friend."
另一个案例

string1 <- "You know that song Mary had a little lamb? Mary is my friend and she is also a friend of another friend"
strsplit(string1, '(\\b\\S+\\b)(?=.*\\b\\1\\b.*)', perl=TRUE)[[1]]
#[1] "You know that song " " had "               " little lamb? Mary "
#[4] " my "                " and she is also a " " of another friend" 
string1这可能会有所帮助

strsplit(string, '(\\b\\S+\\b)(?=.*\\b\\1\\b.*)', perl=TRUE)[[1]]
##[1] "You know that song "                   
#[2] " had a little lamb? Mary is my friend."
另一个案例

string1 <- "You know that song Mary had a little lamb? Mary is my friend and she is also a friend of another friend"
strsplit(string1, '(\\b\\S+\\b)(?=.*\\b\\1\\b.*)', perl=TRUE)[[1]]
#[1] "You know that song " " had "               " little lamb? Mary "
#[4] " my "                " and she is also a " " of another friend" 


string1
strsplit(string,“Mary”)
。我不知道还有什么可以尝试。你可以尝试用一个字符串(在其他任何地方都不会出现)替换第一个ocurrence,然后进行拆分:
strsplit(sub(“Mary”),“_”,string),“”)
有没有办法自动用通配符替换第一个匹配项?我最终要做的是使用while循环拆分一个很长的字符串。在名称上拆分,如果名称与前一个名称相同,则不执行任何操作,直到出现与前一个名称不同的名称。字符串很长,我不想手动搜索它并替换名称假设如果有多个名称多次出现,您能演示如何拆分它吗?我还猜测,如果例如
had
a
repeats>1,正则表达式需要拆分time@src471假设字符串是
“你知道宋玛丽有一只小羊羔吗?玛丽是我的朋友,她也是另一个朋友的朋友”
,那么预期的结果是什么?
strsplit(字符串,“玛丽”)
。我不知道还有什么可以尝试。你可以尝试用一个字符串(在其他任何地方都不会出现)替换第一个ocurrence,然后进行拆分:
strsplit(sub(“Mary”),“_”,string),“”)
有没有办法自动用通配符替换第一个匹配项?我最终要做的是使用while循环拆分一个很长的字符串。在名称上拆分,如果名称与前一个名称相同,则不执行任何操作,直到出现与前一个名称不同的名称。字符串很长,我不想手动搜索它并替换名称假设如果有多个名称多次出现,您能演示如何拆分它吗?我还猜测,如果例如
had
a
repeats>1,正则表达式需要拆分time@src471假设字符串是
“你知道那首歌玛丽有一只小羊羔吗?玛丽是我的朋友,她也是另一个朋友的朋友”
,预期的结果是什么?但是在这种情况下,如何使用
strsplit
防止在第二次出现“Mary”时拆分?很抱歉,在注释时没有检查前面的字符串。错误号码:-)您可以使用
库(stringi);stri_split_fixed(字符串'Mary',n=2)
我认为问题还在于自动抓取这些多次发生的事件,而不是手动输入names@akrun你第一次评论的那篇文章真的很有趣。但是我认为上面的解决方案如果不是更快的话也差不多,因为您需要将
strsplit()
片段重新组合起来以获得OP所需的输出?尽管我没有对它进行基准测试来验证,但考虑到这个问题中的期望结果与您链接到的其他结果之间的差异,我的印象就是如此。啊,你的编辑速度太快了,但是我也很喜欢
stringi
解决方案,上档。但是在这种情况下,你如何使用
strsplit
防止在第二次出现“Mary”时拆分?抱歉,在评论之前没有检查字符串。错误号码:-)您可以使用
库(stringi);stri_split_fixed(字符串'Mary',n=2)
我认为问题还在于自动抓取这些多次发生的事件,而不是手动输入names@akrun你第一次评论的那篇文章真的很有趣。但是我认为上面的解决方案如果不是更快的话也差不多,因为您需要将
strsplit()
片段重新组合起来以获得OP所需的输出?尽管我没有对它进行基准测试来验证,但考虑到这个问题中的期望结果与您链接到的其他结果之间的差异,我的印象就是如此。啊,你的编辑速度太快了,但我也很喜欢
stringi
解决方案,我对原始问题中的第二个字符串(因为这个问题得到了回答而编辑)也会起作用吗?我对Perl一无所知。@src471您能用第二个字符串的预期结果更新您的帖子吗?这也适用于原始问题中我的第二个字符串(由于回答了这个问题而编辑)?我对Perl一无所知。@src471您能用第二个字符串的预期结果更新您的帖子吗