Perl正则表达式捕获以行首和行尾(行末有带空格的字符)之间的字符串。

3

我要翻译的数据串如下:

(wlc-nyhy30-a) *

我需要移除开头和结尾精确匹配的括号) *

我的最终字符串应该是:

wlc-nyhy30-a

我可以很容易地去掉开头的 (,像下面这样,但我非常难以让Perl匹配并删除行末的 ) *

这是有效的第一部分:

$output{'prompt'} =~ s/^\(//;

感谢任何帮助。提前致谢。

这个 ") *) 在目标字符串中的哪里? - user12097764
@x15,我认为应该是“)*”,就像“)*”一样。 - ikegami
1个回答

5
您可以使用以下方法:
s/^\((.*)\)\s\*$/$1/

解释:

^          beginning of the string
\(         opening parenthese - needs to be escaped with \
(.*)       ...a capturing group...
\)         closing parenthese - needs to be escaped with \
\s         a single space
\*         a star - needs to be escaped
$          end of the string

这将整个字符串进行匹配,因此它将适用于您提供的示例字符串((wlc-nyhy30-a) *),同时也不会影响其他字符串,例如(wlc-nyhy30-a) a

演示:

my $string = "(wlc-nyhy30-a) *";
$string =~ s/^\((.*)\)\s\*$/$1/
print $string, "\n";

产生:

wlc-nyhy30-a

可能读入了比已知更多的信息。不认为他声称结束是开始的先决条件,或者反之亦然,那将会引起平衡的开-闭要求。原始正则表达式看起来很好。^\(|\)\s\*$ - user12097764
@x15:嗯,很难确定。我最初也是像你一样阅读的,但后来我改变了想法。OP没有发表评论。也许我应该编辑我的答案,展示两种解决方案。 - GMB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接