Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何从某个列捕获所有数据?_Regex - Fatal编程技术网

Regex 如何从某个列捕获所有数据?

Regex 如何从某个列捕获所有数据?,regex,Regex,我希望匹配特定列中的所有数据,例如在下面的示例中从“test2”列中提取所有信息 common: "mortalkombat_sonia_rules_abc," player: "Mortal Kombat," 22-May-22 Test1 Test2 Type1 Type2 Type3 X Y HOR1 VER1 Data1 Error1 r1107 ab-1 abcr0201 222 22 -222

我希望匹配特定列中的所有数据,例如在下面的示例中从“test2”列中提取所有信息

common: "mortalkombat_sonia_rules_abc," player: "Mortal Kombat,"    22-May-22 
Test1   Test2   Type1   Type2   Type3   X   Y   HOR1    VER1    Data1    Error1         
r1107   ab-1    abcr0201    222 22  -222    -22 -222    -22 2   2   Testing     
r1106   ab-1    abcr0201    222 22  -222    -22 -222    -22 2   2   Testing     
c377    ab-1    abcf0402    222 2   -222    -22 -222    -22 2   2   Testing     
r632    ab-1    abcd0402    222 22  -222    -22 -222    -22 2   2   Testing
描述
^(?!common:)(?:([^\s\n]+)\s+{2}

此正则表达式将执行以下操作:

  • 跳过以
    common:
  • 将第二列中的值放入捕获组1
  • 是可伸缩的,因为所需的列可以通过在末尾更改
    {2}
    中的数字来控制
例子 现场演示

示例文本

common:“凡人快拍”\u sonia\u rules\u abc,“玩家:“凡人快拍”,5月22日
Test1 Test2 Type1 Type2 Type3 X Y HOR1 VER1数据错误1
r1107 ab-1 abcr0201 222 22-222-22-222-22 2测试
r1106 ab-2 abcr0201 222 22-222-22-222-22 2测试
c377 ab-3 abcf0402 222-222-22-222-22测试
r632 ab-4 abcd0402 222-222-22-222-22测试
样本匹配

匹配1
1.[87-92]`测试2`
比赛2
1.[176-180]`ab-1`
比赛3
1.[257-261]`ab-2`
第四场
1.[338-342]`ab-3`
第五场
1.[419-423]`ab-4`
解释
节点说明
----------------------------------------------------------------------
^“行”的开头
----------------------------------------------------------------------
(?!向前看,看看是否有:
----------------------------------------------------------------------
普通:'普通:'
----------------------------------------------------------------------
)展望的结束
----------------------------------------------------------------------
(?:组,但不捕获(2次):
----------------------------------------------------------------------
(组和捕获到\1:
----------------------------------------------------------------------
[^\s\n]+除空格(\n,
\r、 \t、\f和“”)、“\n”(换行符)
(1次或更多次(与most匹配)
(可能的金额)
----------------------------------------------------------------------
)结束\1
----------------------------------------------------------------------
\s+空格(\n、\r、\t、\f和“”)(1
或更多次(与最大金额匹配)
(可能的)
----------------------------------------------------------------------
){2} 分组结束
----------------------------------------------------------------------

OK;那么,您尝试了什么,为什么它不起作用,您得到了什么结果,您期望得到什么结果,您使用哪种语言来嵌入正则表达式?这里真的没有足够的信息让我们能够帮助你。考虑是否需要输出中第一行或第二行的任何信息是很有趣的。在开始时是否可以跳过两行以上的内容(如果是这样,您如何知道何时开始处理列)?我花了几天时间在这方面,但没有找到任何匹配的内容,我使用的是在线正则表达式测试程序和expresso应用程序。我看到过这样的例子:\s*“[^你得到了一个不错的答案。翻译成Perl:
Perl-nl-e'print$1 if/^(?!common:)(?:([^\s\n]+)\s+{2}/'数据
它产生了你可能想要的东西。