我试图使用这个正则表达式来捕获字符串中的数字。
gsub("\\d+(?= win)", "\\1", "1 win & 1 nomination", perl = TRUE)我想捕获值1(1 win),但是\\1返回字符串win & 1 nomination,如何使它返回数字1?
编辑:我还需要捕获的胜利字符串,如:提名2金球奖。另有21人胜出,72人获得提名。
示例字符串和结果:
发布于 2017-03-05 14:40:28
试试这个:
gsub("^(\\d+).*", "\\1", "1 win & 1 nomination")
[1] "1"发布于 2017-03-05 14:58:21
您的解决方案-- gsub("\\d+(?= win)", "\\1", "1 win & 1 nomination", perl = TRUE) --无法工作,因为您的模式中没有捕获组,而且\1是空的。因此,您可以有效地删除1+数字,这些数字位于space+win之前。
如果您需要将空格之前的数字和win或wins作为整体单词,请使用以下regmatches解决方案:
> x <- c("Nominated for 2 Golden Globes. Another 21 wins & 72 nominations.", "3 wins & 2 nominations.", "Won 2 Oscars. Another 72 wins & 57 nominations.")
> regmatches(x, regexpr("\\d+(?=\\s*wins?\\b)", x, perl=TRUE))
[1] "21" "3" "72"详细信息
\\d+ -1或更多位数(?=\\s*wins?\\b) -只有在跟随的情况下\\s* -0或更多的空白空间wins?\\b --还有整个单词win或wins。
使用regex的另一个变体(不匹配sub或win或wins作为整体词)使用TRE regex (默认风格)的解决方案:
> sub(".*?(\\d+)\\s*win.*", "\\1", x)
[1] "21" "3" "72"详细信息
.*? -匹配任何0+字符,尽可能少,直到第一个.(\\d+) -(第1组后来用\\1表示)-1或更多位数\\s* - 0+白空间win -一个win字符序列.* -到字符串末尾的任何0+字符。https://stackoverflow.com/questions/42609611
复制相似问题