我需要一个正则表达式,可以从这样的描述中捕获数据:
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
谢谢!
答案 0 :(得分:1)
为什么不简单地将其分解为多个正则表达式?这样你就可以检查字符串中是否包含“雕刻”,然后填充雕刻值,或者将其留空。
答案 1 :(得分:0)
最好将它分解为每个部分的多个正则表达式,但你可以通过用括号括起来并添加一个?来制作像雕刻可选的块。之后,(like this)?
答案 2 :(得分:0)
/(\d{2}.+gold).+(style \d+)(.+?)(engravings:.*?)?(band engraving:.*)?/i
可以做你想做的事情
答案 3 :(得分:0)
...可以是14kt,10kt,黄色或白色的组合......
我真的不认为正则表达式是你想要的。这并不总是合适的。
如果数据的顺序可能因描述而异(例如有时风格出现在黄金之前,有时则在之后),那么这是一个非常好的指标,您需要更一般的解析(可能使用rossfabricant建议的多个正则表达式)。
如果您知道订单是100%一致的,那么您可以构建一个单一的正则表达式,但我认为这将是更多的努力而不是它的价值。可能有更好的选择 - 它有助于了解您正在使用的语言。