在 Java (Pig) Regex 中,我该如何执行以下操作?
我的数据来自一个由管道分隔的 txt 文件。不幸的是 2 个字段可以有多个值。为了分隔这些倍数,发送者再次使用管道,但在其周围加上引号。我的正则表达式工作了几个月,直到出现某种罕见的情况...
目前的正则表达式:
([^\|]*)\|"?([^"]*)"?\|([^\|]*)\|"?([^"]*)"?
它适用于大多数情况下发生的以下情况: abc|"part1|part2"|abc|"tool1|tool2"
但在这种情况下, ([^"]*)
向前跳转并获取从空白到引号末尾的所有内容: abc||abc|"tool1|tool2"
所以我意识到我必须考虑下一个管道而不是引号的情况。 只是不知道如何............ PS 对于那些可能会看到这个的 PIG 人,我从每个转义中删除了一个反斜杠,使其看起来更像 Java,但在 PIG 中你需要 2,仅供参考。
I have data coming in a txt file delimited by pipes. The unfortunate thing is 2 fields can have multiple values. To separate these multiples, the sender used pipes again, but put quotes around it. My regex worked for months until a certain rare situation...
Regex currently:
([^\|]*)\|"?([^"]*)"?\|([^\|]*)\|"?([^"]*)"?
And it worked for the following situation which happens most of the time:
abc|"part1|part2"|abc|"tool1|tool2"
But this case is where the ([^"]*)
jumps ahead and takes all from the blank to the end of the quotes:
abc||abc|"tool1|tool2"
So I realize I must account for when there is a pipe next instead of a quote.
Just not sure how.............
P.S. For those PIG people that might be looking at this, I removed a backslash from each escape, to make it look more like Java, but in PIG you need 2, fyi.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在表达式中,您需要指定
|
之间的部分可以加引号,也可以不加引号。您可以按如下方式进行操作:现在您可以根据需要重复此部分几次,中间使用
|
。In your expression you need to specify that the part between
|
s can be either quoted or not quoted. You can do it as follows:Now you can repeat this part several times with
|
s in between, as you need.