R正则表达式 - 匹配到结尾的第一个字母 - 空格 - 数字组合

时间:2015-10-20 19:53:47

标签: regex r gsub

我有以下字符串向量:

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也将起作用。

3 个答案:

答案 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"