Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.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_Stringr - Fatal编程技术网

从R中的文本中从模式子集中提取模式

从R中的文本中从模式子集中提取模式,r,regex,stringr,R,Regex,Stringr,我有如下代码列表 ccode<-c('S','PD','CH','ML','MD','VA','BVI','DB','KD','KE','PW','COL','AD','MET','VP','SI','VR','GAO','LK','RP','PAD','WAN','PWD','PMP','PBR','VN','PPC','NK','K','AH','I','JP','JU','UDZ','CHM','DDN','LN','CL','CLH','DKM','GK','WD','ED','D

我有如下代码列表

ccode<-c('S','PD','CH','ML','MD','VA','BVI','DB','KD','KE','PW','COL','AD','MET','VP','SI','VR','GAO','LK','RP','PAD','WAN','PWD','PMP','PBR','VN','PPC','NK','K','AH','I','JP','JU','UDZ','CHM','DDN','LN','CL','CLH','DKM','GK','WD','ED','DDK','DLN','DRN','DFD','GZB','DVV','GUR','GGN','ND','HHN','HAS','HYD','HKP','BWF','BBW','BKM','BSN','BL','BIN','ST','KN')
这个公式只适用于静态代码“AH”。如何对ccode中的任何代码进行相同的匹配。

我们可以试试

pat <- paste0("(?i)\\b(", paste(ccode, collapse="|"),")-.*")
str_extract(v1, pat)
#[1] NA            NA            NA            NA            "Ah-5564 Tst" NA            "AH-2445 AG"  "AH-5747 AG"  "AH-5361 AG"  "Ah-5564 Tst"
pat我们可以试试

pat <- paste0("(?i)\\b(", paste(ccode, collapse="|"),")-.*")
str_extract(v1, pat)
#[1] NA            NA            NA            NA            "Ah-5564 Tst" NA            "AH-2445 AG"  "AH-5747 AG"  "AH-5361 AG"  "Ah-5564 Tst"

pat我假设您需要提取子字符串,子字符串在单词边界后以“code”开头,后跟连字符

然后,使用

 "\\b(?:S|PD|CH|ML|MD|VA|BVI|DB|KD|KE|PW|COL|AD|MET|VP|SI|VR|GAO|LK|RP|PAD|WAN|PWD|PMP|PBR|VN|PPC|NK|K|AH|I|JP|JU|UDZ|CHM|DDN|LN|CL|CLH|DKM|GK|WD|ED|DDK|DLN|DRN|DFD|GZB|DVV|GUR|GGN|ND|HHN|HAS|HYD|HKP|BWF|BBW|BKM|BSN|BL|BIN|ST|KN)-\\w*"
\b
代表单词边界时,接着是一组代码替代项(
(?:…)
),然后是连字符(
-
),后跟零个或多个字母数字/下划线符号(
\w*

下面是一个演示代码:

> consolidated_csv_v2 <- c("Head Office","(cancelled)","(cancelled)","(cancelled)","Deepali Mishra Ah-5564 Tst", "(cancelled)","SHRUTI BHAGAT AH-2445 AG","SUMIT SETHI AH-5747 AG","SUJATA VORA AH-5361 AG","Deepali Mishra Ah-5564 Tst")
> ccode<-c('S','PD','CH','ML','MD','VA','BVI','DB','KD','KE','PW','COL','AD','MET','VP','SI','VR','GAO','LK','RP','PAD','WAN','PWD','PMP','PBR','VN','PPC','NK','K','AH','I','JP','JU','UDZ','CHM','DDN','LN','CL','CLH','DKM','GK','WD','ED','DDK','DLN','DRN','DFD','GZB','DVV','GUR','GGN','ND','HHN','HAS','HYD','HKP','BWF','BBW','BKM','BSN','BL','BIN','ST','KN')
> reg <- paste0("\\b(?:", paste(ccode, collapse="|"),")-\\w*")
> str_extract(consolidated_csv_v2, reg)
 [1] NA        NA        NA        NA        NA        NA        "AH-2445"
 [8] "AH-5747" "AH-5361" NA       
> 


要使此模式不区分大小写,只需在第一个
\b

前面添加一个
(?i)
,我假设您需要提取子字符串,该子字符串在单词边界后以“code”开头,后跟连字符

然后,使用

 "\\b(?:S|PD|CH|ML|MD|VA|BVI|DB|KD|KE|PW|COL|AD|MET|VP|SI|VR|GAO|LK|RP|PAD|WAN|PWD|PMP|PBR|VN|PPC|NK|K|AH|I|JP|JU|UDZ|CHM|DDN|LN|CL|CLH|DKM|GK|WD|ED|DDK|DLN|DRN|DFD|GZB|DVV|GUR|GGN|ND|HHN|HAS|HYD|HKP|BWF|BBW|BKM|BSN|BL|BIN|ST|KN)-\\w*"
\b
代表单词边界时,接着是一组代码替代项(
(?:…)
),然后是连字符(
-
),后跟零个或多个字母数字/下划线符号(
\w*

下面是一个演示代码:

> consolidated_csv_v2 <- c("Head Office","(cancelled)","(cancelled)","(cancelled)","Deepali Mishra Ah-5564 Tst", "(cancelled)","SHRUTI BHAGAT AH-2445 AG","SUMIT SETHI AH-5747 AG","SUJATA VORA AH-5361 AG","Deepali Mishra Ah-5564 Tst")
> ccode<-c('S','PD','CH','ML','MD','VA','BVI','DB','KD','KE','PW','COL','AD','MET','VP','SI','VR','GAO','LK','RP','PAD','WAN','PWD','PMP','PBR','VN','PPC','NK','K','AH','I','JP','JU','UDZ','CHM','DDN','LN','CL','CLH','DKM','GK','WD','ED','DDK','DLN','DRN','DFD','GZB','DVV','GUR','GGN','ND','HHN','HAS','HYD','HKP','BWF','BBW','BKM','BSN','BL','BIN','ST','KN')
> reg <- paste0("\\b(?:", paste(ccode, collapse="|"),")-\\w*")
> str_extract(consolidated_csv_v2, reg)
 [1] NA        NA        NA        NA        NA        NA        "AH-2445"
 [8] "AH-5747" "AH-5361" NA       
> 



若要使此模式不区分大小写,只需在第一个
\b
前面添加一个
(?i)

请通过发布一些数据使您的示例重现。您如何拥有代码“S”和代码“SI”?以SA开头的字符串,例如?@Andrie用示例数据更新,这有什么帮助@是的,我知道这是一个挑战!至少我可以找到其他代码,对吗?也许可以使用模式
stru extract(合并的csv_v2[,4],粘贴0(^(“,粘贴(ccode,collapse=“”)”)。”)
请通过发布一些数据来重现您的示例。您如何拥有代码“S”和代码“SI”?以SA开头的字符串,例如?@Andrie用示例数据更新,这有什么帮助@是的,我知道这是一个挑战!至少我可以找到其他代码,对吗?也许可以使用模式
str_extract(consolidated_csv_v2[,4],paste0(“^(”,paste(ccode,collapse=“”)”)*)
非常感谢。并非所有的单词后面都跟有“-”,有些单词后面跟有空格,有些单词之间没有任何字符。但一切都以一个数字结束。如果您也能提供解决方案,这将是很有帮助的。还有,任何关于如何处理诸如“S”等单个字符的帮助,请尝试
reg我不太喜欢
*?
,但是您的一些后面有空格,一些中间没有任何字符听起来不精确。请检查实际需求并更新问题,以便我们可以帮助您使用最安全的模式。再次感谢您的努力。我已经更新了符合我所有要求的测试集。完成!非常感谢你!这是区分大小写的。如何使它不区分大小写?非常感谢。并非所有的单词后面都跟有“-”,有些单词后面跟有空格,有些单词之间没有任何字符。但一切都以一个数字结束。如果您也能提供解决方案,这将是很有帮助的。还有,任何关于如何处理诸如“S”等单个字符的帮助,请尝试
reg我不太喜欢
*?
,但是您的一些后面有空格,一些中间没有任何字符听起来不精确。请检查实际需求并更新问题,以便我们可以帮助您使用最安全的模式。再次感谢您的努力。我已经更新了符合我所有要求的测试集。完成!非常感谢你!这是区分大小写的。如何使其不区分大小写?谢谢您的帮助!谢谢你的帮助!
reg <- paste0("(?i)\\b(?:", paste(ccode, collapse="|"),").*?\\d+\\b")