Regex 正则表达式从描述中捕获数据

Regex 正则表达式从描述中捕获数据,regex,Regex,我需要一个正则表达式,它可以从如下描述中捕获数据: 14Kt黄金母亲戒指款式 152,真品紫水晶,真品 钻石、仿祖母绿、优质 黄玉、优质电气石、正品 蓝宝石,雕刻: 吉姆、杰克、约翰、杰夫、罗布、桑迪、乐队 雕刻:史密斯 我需要捕捉的是: A) 样式(样式152)(样式+任意数字) B) 黄金(14Kt黄金)(可以是14Kt、10kt、黄色或白色的组合) C) 宝石(纯正紫水晶、纯正钻石、仿祖母绿、优质黄玉、优质电气石、纯正蓝宝石)(数量可能有所不同,但始终至少为1) D) 雕刻(吉姆、杰克、约

我需要一个正则表达式,它可以从如下描述中捕获数据:

14Kt黄金母亲戒指款式 152,真品紫水晶,真品 钻石、仿祖母绿、优质 黄玉、优质电气石、正品 蓝宝石,雕刻: 吉姆、杰克、约翰、杰夫、罗布、桑迪、乐队 雕刻:史密斯

我需要捕捉的是:

A) 样式(样式152)(样式+任意数字)

B) 黄金(14Kt黄金)(可以是14Kt、10kt、黄色或白色的组合)

C) 宝石(纯正紫水晶、纯正钻石、仿祖母绿、优质黄玉、优质电气石、纯正蓝宝石)(数量可能有所不同,但始终至少为1)

D) 雕刻(吉姆、杰克、约翰、杰夫、罗布、桑迪)(这可以是0或更多,字符串雕刻:如果没有名字就不会出现)

E) 乐队雕刻(史密斯)(这也是可选的,如果没有名字,字符串乐队雕刻也不会出现)

我已经有几个月的时间在进行常规的抑郁治疗了,但这有点让我不知所措,因为这是我想到的最好的一个,但如果弦乐雕刻:消失了,它就不起作用了:

/(\d{2}.+gold).+(style \d+)(.+)engravings:([^\*]*)(\*)?(.*)/i

谢谢

为什么不简单地把它分解成多个正则表达式呢?这样,您可以检查字符串中是否包含“雕刻”,然后填充雕刻值,或者将其留空

可能最好将其拆分为每个部分有多个正则表达式,但您可以通过用括号括起来并添加一个?之后,
(像这样)?

我可以做你想做的事

。。。可以是14kt、10kt、黄色或白色的组合

我真的不认为正则表达式是你想要的。这并不总是合适的

如果描述之间的数据顺序可能不同(例如,有时样式在gold之前,有时在gold之后),那么这是一个非常好的指标,表明您需要更一般的解析(可能使用rossffabricant建议的多个正则表达式)


如果您知道顺序是100%一致的,那么您可能可以构造一个正则表达式来完成它,但我认为这将是一项不值得的工作。可能有更好的选择——这将有助于了解您使用的是什么语言。

我使用的是PHP,但我认为这将被移植到一个名为VB的同事系统中。使用多个正则表达式是可以的,我只是想要一个优雅的解决方案,它将永远有效。所以雕刻部分可能会丢失。还有什么不同?如果您可以完全指定字符串,我们可以使用正则表达式。如果您不能,那么我建议您的解决方案包括一些标记以意外格式输入的内容,以便您可以细化您的正则表达式。您必须迭代地攻击它。
/(\d{2}.+gold).+(style \d+)(.+?)(engravings:.*?)?(band engraving:.*)?/i