R regex-匹配到从末尾开始的第一个字母空格数字组合
我有以下字符串向量:R regex-匹配到从末尾开始的第一个字母空格数字组合,regex,r,gsub,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调用。如果找到多个组合,请仅移动最后一个组合。被移动的零件将始终以字母和空格开头。
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
也将起作用 这似乎可以处理您提到的情况:
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"
gsub(”(.*Yes。可以有oz和ct以外的单位,规则是只有最后一个“块”“有人动起来了吗?”@RichardScriven,你的答案怎么了?我正要投票表决。我现在感觉很糟糕。即使它对部分案件有效,对meGreat已经很有帮助了,谢谢!如果一个太复杂或根本不可能,请参见编辑关于gsub
,谢谢!我现在有多项选择:)为什么不选择字符数为一半的;)