Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何从单个字符串中提取会话语句_R_Regex_Regex Lookarounds - Fatal编程技术网

R 如何从单个字符串中提取会话语句

R 如何从单个字符串中提取会话语句,r,regex,regex-lookarounds,R,Regex,Regex Lookarounds,我将几个发言者之间的对话记录为一个字符串: convers <- "Peter: hiya Mary: hi how wz your weekend Peter: ahh still got a headache An you party a lot Mary: nuh you know my kid s sick n stuff Peter: yeah i know thats erm al hamshi: hey guys how s it goin Peter: Great

我将几个发言者之间的对话记录为一个字符串:

convers <- "Peter: hiya Mary: hi how wz your weekend Peter: ahh still got a headache An you party a lot Mary: nuh you know my kid s sick n stuff Peter: yeah i know thats erm al hamshi: hey guys how s it goin Peter: Great Mary: where ve you been last week al hamshi: ah you know camping with my girl friend"
我还有一个演讲者姓名向量:

speakers <- c("Peter", "Mary", "al hamshi")
使用这个向量作为我的正则表达式模式的一个组成部分,我在这个提取方面做得比较好:

library(stringr)
str_extract_all(convers, 
                paste("(?<=: )[\\w\\s]+(?= ", paste0(".*\\b(", paste(speakers, collapse = "|"), ")\\b.*"), ")", sep = ""))
[[1]]
[1] "hiya"                                        "hi how wz your weekend"                      "ahh still got a headache An you party a lot"
[4] "nuh you know my kid s sick n stuff"          "yeah i know thats erm al"                    "hey guys how s it goin"                     
[7] "Great"                                       "where ve you been last week"

然而,第三个演讲者的名字al的第一部分包含在一个摘录的话语中是的,我知道那个是erm al,而演讲者al hamshi ah的最后一句话,你们知道,和我女朋友露营的话,从输出中丢失了。如何改进正则表达式,以便正确匹配和提取所有语句?

如果采用另一种方法会怎么样

从文本中删除所有扬声器并拆分“\\s*:\\s*”上的字符串


您可以稍微清理一下输出,以删除其中的第一个空值。

如果您采用另一种方法会怎么样

从文本中删除所有扬声器并拆分“\\s*:\\s*”上的字符串


您可以稍微清理一下输出,从中删除第一个空值。

正确的拆分方法如下所示

p2[1]你好 =>[2]嗨,周末过得怎么样 =>[3]啊,还是很头疼,你经常参加聚会 =>[4]不,你知道我的孩子生病了 是的,我知道,呃 =>[6]嘿,伙计们,最近怎么样 =>[7]太好了 =>[8]你上周去哪儿了 =>[9]啊,你知道和我女朋友一起露营吗 从字符串中移除扬声器的正则表达式如下所示

\s*\b?:彼得|玛丽|阿尔哈姆希?=: 看。它会匹配的

\s*-0+空格 \b-单词边界 ?:Peter | Mary | al-hamshi-发言者之一 ?=:-后面必须跟一个:字符。 然后,使用sub^\\W+。。。调用,然后整个字符串用\s*:\s*正则表达式拆分,该正则表达式与包含0+空格的:相匹配

或者,您可以使用

? [3] 啊,还是头疼,你经常参加聚会 =>[4]不,你知道我的孩子生病了 是的,我知道,呃 =>[6]嘿,伙计们,最近怎么样 =>[7]太好了 =>[8]你上周去哪儿了 =>[9]啊,你知道和我女朋友一起露营吗
正确的拆分方法如下所示

p2[1]你好 =>[2]嗨,周末过得怎么样 =>[3]啊,还是很头疼,你经常参加聚会 =>[4]不,你知道我的孩子生病了 是的,我知道,呃 =>[6]嘿,伙计们,最近怎么样 =>[7]太好了 =>[8]你上周去哪儿了 =>[9]啊,你知道和我女朋友一起露营吗 从字符串中移除扬声器的正则表达式如下所示

\s*\b?:彼得|玛丽|阿尔哈姆希?=: 看。它会匹配的

\s*-0+空格 \b-单词边界 ?:Peter | Mary | al-hamshi-发言者之一 ?=:-后面必须跟一个:字符。 然后,使用sub^\\W+。。。调用,然后整个字符串用\s*:\s*正则表达式拆分,该正则表达式与包含0+空格的:相匹配

或者,您可以使用

? [3] 啊,还是头疼,你经常参加聚会 =>[4]不,你知道我的孩子生病了 是的,我知道,呃 =>[6]嘿,伙计们,最近怎么样 =>[7]太好了 =>[8]你上周去哪儿了 =>[9]啊,你知道和我女朋友一起露营吗
啊,你知道和我女朋友一起露营的事,从那以后还是不见了output@ChrisRuehlemann抱歉,忘记添加|\z选项。现在,它将与您的输入一起工作。谢谢,很棒的东西。我已经调整了我的模式,所以它也可以粘贴?好的,明白了:\z在很大程度上相当于$,匹配字符串的结尾,对吗?@ChrisRuehlemann它们不相等,但您也可以在这里使用$\你知道吗,和我女朋友一起露营的事从现在起就不见了output@ChrisRuehlemann抱歉,忘记添加|\z选项。现在,它将与您的输入一起工作。谢谢,很棒的东西。我已经调整了我的模式,所以它也可以粘贴?好的,明白了:\z在很大程度上相当于$,匹配字符串的结尾,对吗?@ChrisRuehlemann它们不相等,但您也可以在这里使用$\z总是匹配字符串的最末端。这里有两点需要注意:1.如果说话人的名字出现在话语中,它将被删除,无论是较长字符串的一部分,还是只是一个原样的名字。我认为演讲者的名字只有在后面跟一个:。2第一个空项可能不受欢迎,至少它不在预期结果中 ere:1如果一个说话人的名字出现在一个话语中,它将被删除,无论是一个较长字符串的一部分还是一个原样的名字。我认为演讲者的名字只有在后面跟一个:。2第一个空项可能不受欢迎,至少它不在预期结果中。
strsplit(gsub(paste(speakers, collapse = "|"), '', convers), '\\s*:\\s*')[[1]]

# [1] ""                                            "hiya"                                       
# [3] "hi how wz your weekend"                      "ahh still got a headache An you party a lot"
# [5] "nuh you know my kid s sick n stuff"          "yeah i know thats erm"                      
# [7] "hey guys how s it goin"                      "Great"                                      
# [9] "where ve you been last week"                 "ah you know camping with my girl friend"