如何用正则表达式提取you之后、/之前的字符串内容?
解决方案
针对你的需求,这里给两种可行的正则处理方式:
用基础R的sub函数
直接通过捕获组提取目标内容,替换整个字符串为捕获到的单词:
x = "Hello how are you Peter /" x = sub(".*you\\s+(\\w+)\\s+/", "\\1", x) # 结果:x = "Peter"
正则说明:
.*:贪婪匹配"you"之前的所有内容you\\s+:匹配"you"以及后面的一个或多个空白字符(不管空格有多少)(\\w+):捕获我们需要的单词(字母、数字、下划线,这里就是Peter)\\s+/:匹配单词后面的空白字符和最后的"/"\\1:替换为第一个捕获组的内容,也就是目标单词
用stringr包更直观提取
如果习惯用stringr工具包,可以用正向前后查直接定位目标:
library(stringr) x = "Hello how are you Peter /" x = str_extract(x, "(?<=you\\s+)\\w+(?=\\s+/)")
正则说明:
(?<=you\\s+):正向后查,确保前面是"you"加空白\\w+:匹配目标单词(?=\\s+/):正向预查,确保后面是空白加"/"
你之前写法的问题
sub(" you*/.", "", x) 里的错误点:
you*是匹配"yo"加上任意数量的u(比如yoo、youuu),不是匹配"you"之后的内容/.是匹配"/"加任意一个字符,完全不符合你要匹配的空白+"/"的场景
内容的提问来源于stack exchange,提问作者onhalu
相关产品推荐
相关产品推荐

