Perl Regex匹配分隔字符串

时间:2018-02-16 14:35:47

标签: regex pcre netezza

对于我的生活,我无法用Perl语法来解决这个问题。我已经设法让这种味道在Javascript中运行,其中N是匹配号码。

Dim readText() As String = File.ReadAllLines(file)

我也试过匹配任何不管道的东西,但是我似乎无法编写正则表达式来提取我需要的Perl风格的匹配索引。有什么指针吗?

数据看起来像这样

  

ASTRING |另一个字符串|测试|可能还有一些文字

当第一个正则表达式在正则表达式调试器中运行时,它会产生这个(这是我想要运行的)。

^(?:[^\|]*\|){N}([^\|]*) ^(?:[^\|]*\|){0}([^\|]*) produces 'astring'

然而,当我在Netezza(Perl Regex,我需要它运行的地方)运行它时,它会产生:

^(?:[^\|]*\|){3}([^\|]*) produces 'maybe some more text' ^(?:[^\|]*\|){0}([^\|]*) produces 'astring'

更新: 问题解决了正则表达式没问题,但是我是一个笨蛋而没有正确使用Netezza中的功能。这导致了正则表达式的严重过度复杂化。 REGEXP_EXTRACT下面的示例(列,' [^ \ |] +',1,4)

2 个答案:

答案 0 :(得分:0)

我认为您可以重复[^\|] 1次或更多次[^\|]+

^(?:[^\|]+\|){N}([^\|]+)

^(?:[^\|]+\|){0}([^\|]+)会捕获第1组中的astring

^(?:[^\|]+\|){3}([^\|]+)会捕获第1组中的maybe some more text

答案 1 :(得分:0)

当你的数据被分隔时,你想要的工具不是魔法正则表达式,而是分裂:

#!/usr/bin/env perl

use strict;
use warnings;

my $target_field = 3;
my $str = "astring| another string|test|maybe some more text";

print +(split (/\|/, $str))[$target_field]