使用RegEx将连接的字符串解析回单个字段

时间:2016-11-20 00:23:37

标签: regex

我认为我在这个RegEx上非常接近,但我希望我能得到第二眼来帮助我完成它。我有一个公司的销售历史.csv导出,导出中的item列是一些不同字段的串联,我想使用捕获组再次分解为单个列。如果它包含填写项目的所有信息,则该列如下所示:

Vendor:Item Number (Item Description)

但有时旧系统没有供应商,或者没有描述,所以它只是省略了那些并且没有插入:分隔符或空括号。我在导出中的行看起来像这样:

Item Number

Vendor:Item Number

Item Number (Description)

而且,不幸的是,

Item Number (Description (extra nested parenthesis))

我遇到了根本没有描述的行,以及描述部分中嵌套括号的行。这是我到目前为止所提出的。在此先感谢您的帮助。

https://regex101.com/r/JEzBAJ/3

1 个答案:

答案 0 :(得分:2)

我认为我们可以在此处使用:(作为分隔符,并在最终:作为供应商之前匹配所有内容,并在最终(作为描述之后匹配所有内容。

^(?:([^:\n]+):)?([^(\n]+)(.+)?

因此可以在这里使用,请注意您必须使用多行模式,因此^匹配每行的开头,而不仅仅是在字符串的开头。

  • (?:([^:\n]+):)? - 可选地匹配字符串开头的每个非:和以下:
  • ([^(\n]+) - 匹配每个非((如果没有,则会匹配该行的提醒)
  • (.+)? - 匹配该行的提醒,如果有(因此有一个()。

Hello (World:Meow)可能存在错误,其中Hello (World将作为供应商匹配 - 取决于是否是有效案例并且应该作为数字和描述进行匹配,您可能希望将模式调整为^(?:([^(:\n]+):)?([^(\n]+)(.+)?

以下是firstsecond模式的演示。