我有以下字符串向量:
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
调用。如果找到多个组合,则仅移动最后一个组合。移动的部分将始终以字母和空格开头。
所需的输出将是:
"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
也将起作用。
答案 0 :(得分:3)
这似乎处理了你提到的案例:
sub("(.*[a-z]{1}) ([0-9.]+\\s*-?\\s*[0-9.]*\\s*[a-z]*\\s*)$", "\\2 \\1", x)
答案 1 :(得分:3)
试试这个:
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"
答案 2 :(得分:2)
这似乎也适用于您的案例
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"