对于我的生活,我无法用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)
答案 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]