从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")