R regex - 匹配直到第一个字母 - space - 数字组合从末尾开始

R regex - match until first letter-space-digit combination from the end

我有以下字符串向量:

x = c("Breakfast Sandwich 12.6 - 18.4oz 4 - 8ct", 
      "Buffalo Wing 7.6 - 10 oz", 
      "Asstd Cafe Appetizer 8 - 20", 
      "16in Extra Lrg Pepperoni 45.5oz") 

我需要将大小移到字符串的开头,但我无法为它创建适当的 regex 调用。如果找到多个组合,则只移动最后一个。移动的部分将始终以字母和 space 开头。 所需的输出将是:

"4 - 8ct Breakfast Sandwich 12.6 - 18.4oz", 
"7.6 - 10 oz Buffalo Wing", 
"8 - 20 Asstd Cafe Appetizer", 
"45.5oz 16in Extra Lrg Pepperoni"

我认为,非贪婪匹配直到找到类似 [a-z] [0-9].*? 的东西?或者可以使用 split 代替? 你能帮我解决一下吗?提前致谢!

B.t.w.,如果没有针对所有测试用例的一步解决方案,一系列单独的 gsub 也可以。

这似乎可以处理您提到的情况:

sub("(.*[a-z]{1}) ([0-9.]+\s*-?\s*[0-9.]*\s*[a-z]*\s*)$", "\2 \1", x)

这似乎也适用于您的情况

sub("(.*[a-zA-Z]) +(\d.*)", "\2 \1", x)
# [1] "4 - 8ct Breakfast Sandwich 12.6 - 18.4oz" "7.6 - 10 oz Buffalo Wing"                
# [3] "8 - 20 Asstd Cafe Appetizer"              "45.5oz 16in Extra Lrg Pepperoni" 

试试这个:

 gsub('(.*(?<=\w)) (\d.*$)','\2 \1',x,perl=T)
[1] "4 - 8ct Breakfast Sandwich 12.6 - 18.4oz" "7.6 - 10 oz Buffalo Wing"                 "8 - 20 Asstd Cafe Appetizer"             
[4] "45.5oz 16in Extra Lrg Pepperoni"