Text 1 :
do not match: nw, n, s and somethingelse.
all directions are: n, w, s and e.
Expect :{n, w, s, e}
Text 2 :
do not match: nw, n, s and somethingelse.
all directions are: nw, sw, se, w, ..., s and e.
Expect :{nw, sw, se, w, ..., s, e}
是否可以在一个快递中捕捉所有方向?
答案 0 :(得分:0)
你在找这样的东西吗?
my $text = "all directions are: nw, sw, se, w, ..., s and e.";
if( $text =~ /all directions are:\s+(([^,]+,\s+)+)(\w+)\s+and\s+(\w+)\./)
{
print "$1 $3, $4\n";
}
输出:
nw, sw, se, w, ..., s, e
说明:
([^,]+,\s+)
匹配目录名称后跟逗号(,
)和一些空格。这可以在字符串中重复n
次。
然后我们必须匹配x and y
部分。 (\w+)\s+and\s+(\w+)\.
会照顾到这一点。
答案 1 :(得分:0)
如下所述,无法捕获一个表达式:Python regular expressions - how to capture multiple groups from a wildcard expression?
你问题的灵魂可能就是:
spacemacs/sudo-edit
答案 2 :(得分:0)
虽然正如Phyreprooph所解释的那样,使用单个表达式是不可能的,但您可以使用/g
(“global”)修饰符多次匹配并生成匹配列表,如下所示:
if(/all directions are:\s*(.*)/) {
@dir = $1 =~ /(\.\.\.|\b[nsew]{1,2}\b)/g;
print "{", join(", ", @dir), "}\n";
}