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

时间:2009-04-01 19:58:37

标签: regex

我需要一个正则表达式,可以从这样的描述中捕获数据:

  

14K黄金母亲戒指款式   152,正版紫水晶,正版   钻石,模拟绿宝石,高级   黄玉,高级电气石,正品   蓝宝石,雕刻:   吉姆,杰克,约翰,杰夫,抢,沙,乐队   雕刻:史密斯

我需要捕捉的是:

A)风格(风格152)(风格+任何数字)

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

C)石头(真正的紫水晶,真正的钻石,模拟祖母绿,高级黄玉,高级电气石,真正的蓝宝石)(这可以改变多少但总是至少1)

D)雕刻(jim,jake,john,jeff,rob,sandy)(如果没有名字,这可以是0或更多,字符串 Engravings:不会在那里)

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

我一直在处理几个月的常规印象,但这有点超过我的头脑,因为它可以非常多......这是我提出的最好的一个但是如果字符串没有ork 雕刻:消失了:

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

谢谢!

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

最好将它分解为每个部分的多个正则表达式,但你可以通过用括号括起来并添加一个?来制作像雕刻可选的块。之后,(like this)?

答案 2 :(得分:0)

/(\d{2}.+gold).+(style \d+)(.+?)(engravings:.*?)?(band engraving:.*)?/i

可以做你想做的事情

答案 3 :(得分:0)

  

...可以是14kt,10kt,黄色或白色的组合......

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

如果数据的顺序可能因描述而异(例如有时风格出现在黄金之前,有时则在之后),那么这是一个非常好的指标,您需要更一般的解析(可能使用rossfabricant建议的多个正则表达式)。

如果您知道订单是100%一致的,那么您可以构建一个单一的正则表达式,但我认为这将是更多的努力而不是它的价值。可能有更好的选择 - 它有助于了解您正在使用的语言。