我认为我在这个RegEx上非常接近,但我希望我能得到第二眼来帮助我完成它。我有一个公司的销售历史.csv导出,导出中的item
列是一些不同字段的串联,我想使用捕获组再次分解为单个列。如果它包含填写项目的所有信息,则该列如下所示:
Vendor:Item Number (Item Description)
但有时旧系统没有供应商,或者没有描述,所以它只是省略了那些并且没有插入:分隔符或空括号。我在导出中的行看起来像这样:
Item Number
Vendor:Item Number
Item Number (Description)
而且,不幸的是,
Item Number (Description (extra nested parenthesis))
我遇到了根本没有描述的行,以及描述部分中嵌套括号的行。这是我到目前为止所提出的。在此先感谢您的帮助。
答案 0 :(得分:2)
我认为我们可以在此处使用:
和(
作为分隔符,并在最终:
作为供应商之前匹配所有内容,并在最终(
作为描述之后匹配所有内容。
^(?:([^:\n]+):)?([^(\n]+)(.+)?
因此可以在这里使用,请注意您必须使用多行模式,因此^
匹配每行的开头,而不仅仅是在字符串的开头。
(?:([^:\n]+):)?
- 可选地匹配字符串开头的每个非:
和以下:
([^(\n]+)
- 匹配每个非(
(如果没有,则会匹配该行的提醒)(.+)?
- 匹配该行的提醒,如果有(因此有一个(
)。 Hello (World:Meow)
可能存在错误,其中Hello (World
将作为供应商匹配 - 取决于是否是有效案例并且应该作为数字和描述进行匹配,您可能希望将模式调整为^(?:([^(:\n]+):)?([^(\n]+)(.+)?
。