在 Java (Pig) Regex 中,我该如何执行以下操作?

发布于 2024-12-22 15:37:21 字数 463 浏览 2 评论 0原文

我的数据来自一个由管道分隔的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦过后 2024-12-29 15:37:21

在表达式中,您需要指定 | 之间的部分可以加引号,也可以不加引号。您可以按如下方式进行操作:

(("[^"]*")|((?!")[^|]*))

现在您可以根据需要重复此部分几次,中间使用 |

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文