字符串之后/之前的R正则表达式提取数字

时间:2015-06-22 06:51:05

标签: regex r

我正在尝试构造一个正则表达式来识别字符串,其中工作“pack”/“pck”/“pack”/“Set”(不区分大小写),如果是(字存在),则提取前面的数字或跟着这个词。例子:

"Fregon EcoClean Multipurpose Scrubber For Pots, Pans, Kitchen, and Bathroom, Green, 3-Pack" -> 3
Bathroom, Green, 3 Pack" -> 3
"Franklin Sports NHL Mini Hockey Goal Set of 2" ->2
"Make: Electronics Components Pack 2" -> 2
"Make: Electronics Components Pack of 2 -> 2

我尝试使用以下表达式:

sub(".*pack(\\d+).*", "\\1", "inflow100 pack6 distance12")

但是,它不符合上述所有情况。 有什么想法吗?

2 个答案:

答案 0 :(得分:5)

以下正则表达式匹配所有示例:

\b(?:(\d+)[-\s][Pp]ack|(?:[Pp]ack|[Ss]et)\s?(?:of\s)?(\d+))

请参阅https://regex101.com/r/jZ4vE2/1

如果您使用它,您会注意到该号码放在\ 1或\ 2中。唯一要做的就是摆脱前面或后面的空格。

> gsub(".*\\b(?:(\\d+)[-\\s][Pp]ack|(?:[Pp]ack|[Ss]et)\\s?(?:of\\s)?(\\d+)).*", "\\1 \\2", "inflow100 pack6 distance12", perl=TRUE)
[1] " 6"

答案 1 :(得分:1)

只需获取最后一个号码。

sub(".*\\b(\\d+).*", "\\1", str)

sub("(\\d+)\\D*$|.", "\\1", str)