RegEx将字符串中的值捕获到一个组中,无论顺序如何?

时间:2011-07-14 03:07:34

标签: regex pcre

我在文本文件中有一堆字符串,其中包含我想要捕获到组中的值。文本文件中的每一行/每行都是唯一的记录,但这些值通常在每行中都符合规定的格式:

ValueA ValueD ValueS ValueR ValueW ValueT
ValueX ValueW ValueB ValueM ValueQ ValueA

等。如果我想将ValueA捕获到捕获组1中并将ValueW捕获到捕获组2中,我是否可以使用一个正确处理事物的正则表达式来执行此操作,而不管值的每行文本中的位置如何问题

目标是然后使用捕获组将两个捕获的值写回文件,以便我可以对它们进行排序,即“ValueW ValueA”。

4 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

^(?=.*?(ValueA))(?=.*?(ValueW)).*

Perl示例:

$_ = <<'_STR_';
ValueA ValueD ValueS ValueR ValueW ValueT
ValueX ValueW ValueB ValueM ValueQ ValueA
_STR_

s/^(?=.*?(ValueA))(?=.*?(ValueW)).*/$1 $2/gm;

print;

输出:

ValueA ValueW
ValueA ValueW

同样在http://ideone.com/IhGfS

注意:如果您只是匹配,则不需要最后.*,并且根据与ValueX模式的匹配程度,您可以删除所有?

答案 1 :(得分:0)

这样的事情可能是:

(?<ValueA>ValueA)|(?<ValueW>ValueW)

答案 2 :(得分:0)

假设它是unix,首先用换行符查找和替换空格,用各种正则表达式管道,然后将组输出到文件中。

答案 3 :(得分:0)

这是正则表达式滥用 - 打电话给警察!

说真的......如果你必须这样做,你可以使用每个组中的或运算符(|)来选择这两个单词中的一个或另一个。