我将以下内容作为单独的输入:
MCMASTER - 94510A260_M8 EXPAND INSERT FOR PLASTICS
MISUMI-AIPOK6-20
MISUMI - AIPOK6-20
J-5858-01_MISUMI-AIPOK6-20
J-5858-01_MISUMI - AIPOK6-20
J-XXXX_MISUMI-AIPOK6-20
J-5858_MISUMI - AIPOK6-20
我需要分割每行以获得供应商,零件号和描述。
我正在使用:
(J-\d{4}-\d{2}\D{0,1}_|J-XXXX-\d{2}\D{0,1}_|J-\d{4}_){0,1}(.*?)-(.*)_{0,1}(.*)
作为模式,但是它不适用于输入的第一行(以MCMASTER开头。)它适用于所有其余输入。
我希望在第一次输入时会得到如下信息:
Group#1 "Undefined"
Group#2 MCMASTER
Group#3 94510A260
Group#4 M8 EXPAND INSERT FOR PLASTICS
答案 0 :(得分:0)
您应该可以使用:
(J-(?:\d{4}|XXXX)\D?(?:-\d{2})?_)?(.*?)-([^_\n\r]*)_?(.*)
参见此处:https://regex101.com/r/yljBDA/1
我用较短的{0,1}
替换了您的所有?
,并且还使用了一些非捕获组来使您的第一个捕获组更加紧凑。
我可以在文本(.*)_{0,1}(.*)
上告诉您94510A260_M8 EXPAND INSERT FOR PLASTICS
不会达到预期的效果,因为.*
很贪婪;也就是说,它会捕获尽可能多的东西。我的最初目的是使第一个捕获对象与.*?
保持非贪婪关系,但是由于某种原因,该方法不起作用。因此,我只是使用否定字符类[^_\n\r]*
来伪造它。如果您正在逐行处理此输入,则应该可以将其缩短为[^_]
。