我正在尝试构建一个正则表达式来标识字符串,其中工作“pack”/“pck”/“packs”/“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")

但是,它并不符合上述所有情况。
有任何想法吗?

最佳答案

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

\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"

关于regex - R正则表达式在字符串之后/之前提取数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30973629/

10-12 23:00