【发布时间】:2016-01-17 22:52:14
【问题描述】:
我有以下数据框:
df <- data.frame(city=c("in London", "in Manchester city", "in Sao Paolo"))
我正在使用 str_extract 并在单独的列中返回“in”之后的单词。
library(stringr)
str_extract(df$city, '(?<=in\\s)\\w+')
这在 95% 的情况下都适用于我。但是,在上面的“Sao Paolo”之类的情况下,我的正则表达式会返回“Sao”而不是城市名称。
有人可以帮我修改它以捕获:
1) 我要从中提取的文本字符串末尾的所有内容?或
2) 如果'in'后面有多个单词,那么也返回它
非常感谢。
【问题讨论】:
-
你只想要
(?<=in\\s).+吗?还是(?<=in\\s)\\w+(?:\\s+\\p{Lu}\\p{L}*)??看起来您使用(?<=in\\s)\\p{Lu}\\p{L}*(?:\\s+\\p{Lu}\\p{L}*)*会更安全。 -
为什么不只是
gsub('^in ', '', df$city) -
对于它的价值,您的正则表达式没有在“Sao Paolo”中选择“Paolo”的原因是因为空格不算作单词字符,所以
\\w+在它得到时停止到空间。调整它时要小心,因为如果你只是允许空格,你最终会捕获“曼彻斯特城”,而不仅仅是“曼彻斯特”。 -
我还推荐使用
str_match,因为in和城市之间可能有两个空格。例如。cities = str_match(df$city, '\\bin\\s+(\\p{Lu}\\p{L}*(?:\\s+\\p{Lu}\\p{L}*)*)')然后cities[,2]将保存这些值。 -
@WiktorStribiżew 您最简单的正则表达式 '(?