在Java(Pig)Regex中,如何执行以下操作?
我有一个由管道分隔的txt文件中的数据。不幸的是,两个字段可以有多个值。为了分隔这些倍数,发送方再次使用管道,但在其周围加上引号。我的正则表达式工作了几个月,直到出现某种罕见的情况 Regex目前:在Java(Pig)Regex中,如何执行以下操作?,java,regex,apache-pig,Java,Regex,Apache Pig,我有一个由管道分隔的txt文件中的数据。不幸的是,两个字段可以有多个值。为了分隔这些倍数,发送方再次使用管道,但在其周围加上引号。我的正则表达式工作了几个月,直到出现某种罕见的情况 Regex目前: ([^\|]*)\|"?([^"]*)"?\|([^\|]*)\|"?([^"]*)"? 它适用于以下大多数情况: abc |“第1部分|第2部分”| abc |“工具1 |工具2” 但是这种情况是([^)] /跳转并将所有从空白到引号的结尾: abc | | abc |“工具1 |工具2” 因此
([^\|]*)\|"?([^"]*)"?\|([^\|]*)\|"?([^"]*)"?
它适用于以下大多数情况:
abc |“第1部分|第2部分”| abc |“工具1 |工具2”
但是这种情况是<代码>([^)] /<代码>跳转并将所有从空白到引号的结尾: abc | | abc |“工具1 |工具2”
因此,我意识到我必须考虑下一步是否有管道而不是报价。 只是不知道如何。。。。。。。。。。。。。另外,对于那些可能正在看这个的猪人们,我从每个转义中删除了一个反斜杠,使它看起来更像Java,但在PIG中,您需要2,仅供参考。
在表达式中,您需要指定
|
S之间的部分可以被引用,也可以不被引用。您可以按如下方式执行:
(("[^"]*")|((?!")[^|]*))
现在你可以根据需要在中间重复几次这个部分。谢谢你的贴子,你非常接近。只需要去掉一些paren。我的朋友帮我做到了:
code
([^\\\]*)\\\\\(“[^”]*”[^\\\\[^\]*)\\\\([^\\\\\]*)\\\\([^\\\\\\\\\]*)\\\\\(“^\[\\\\\\\\\\\\]*”