我将如何去除perl中“_”之前的所有字符?所以如果我有一个字符串是“124312412_hithere”,它会将字符串替换为“hithere”。我想有一个非常简单的方法来使用正则表达式,但我仍然是新的处理,所以我需要帮助。使用正则表达式在perl中删除最多_
回答
这是一个有点更详细的比它需要,但将可能更有价值给你看这是怎么回事:
my $astring = "124312412_hithere";
my $find = "^[^_]*_";
my $replace = "_";
$astring =~ s/$find/$replace/;
print $astring;
此外,还有一点在你的问题相互冲突的要求。如果你只是想hithere
(不带前导_
),然后将其更改为:
$astring =~ s/$find//;
你可以试试这个: -
$_ = "124312412_hithere";
s/^[^_]*_//;
print $_; # hithere
注意,这也将删除_
(我推断从您的示例输出)。如果你想保留_
(因为你的第一条陈述似乎令人怀疑你想要什么),你可能需要使用look-ahead
作为@ ikegami的答案。
此外,为了使其更清楚一点,在正则表达式中的任何替换和匹配都默认应用于$_
。所以,你不需要明确地将它绑定到$_
。这是暗示的。
因此,s/^[^_]*_//;
基本上与 - $_ =~ s/^[^_]*_//;
相同,但稍后不需要。
对于不熟悉正则表达式的人,他会理解你的正则表达式在$ _上运行吗?我认为如果您使用以下内容会更清楚: $ str =“124312412_hithere”; $ str =〜s/^ [^ _] * _ // g; –
@TimA ..你走了。我添加了一些内容,使其更加清晰。 –
删除所有字符,直到达到并包括 “_
”:
s/^[^_]*_//;
“ _
”之前删除所有字符:
s/^[^_]*(?=_)//;
“ _
” 之前,取出所有字符(假设的存在“_
”):
s/^[^_]*//;
我知道它比被要求略有不同,但在这样的情况下(在那里,你知道你要找的字符的字符串中存在的话)我更喜欢使用split
:
$str = '124312412_hithere';
$str = (split (/_/, $str, 2))[1];
在这里,我分割字符串成零件,使用'_'作为分隔符,但最多为2个部分。然后,我将第二部分分配回$str
。
目前仍然在这个解决方案正则表达式(中/ _ /),但我认为这是一个非常简单的解决方案,以阅读和理解比正则表达式充满个性的课程,有条件的火柴等
这只有在字符串最初包含'_'时才有效。绝对不是我的首选解决方案,因为你通常需要添加一个冗余的'if/_ /'或者其他的。 – ikegami
- 1. 删除使用正则表达式
- 2. 使用正则表达式删除HTML
- 3. 删除使用正则表达式
- 4. 删除使用正则表达式
- 5. Python的正则表达式删除Word用正则表达式
- 6. perl正则表达式:使用正则表达式捕获
- 7. 用perl正则表达式
- 8. 正则表达式用Perl
- 9. Perl正则表达式在@
- 10. Perl正则表达式在\
- 11. 正则表达式在Perl
- 12. 正则表达式在Perl
- 13. 删除。*正则表达式打破正则表达式
- 14. 删除所有空格用Perl的正则表达式
- 15. 如何用Perl正则表达式删除所有连字符?
- 16. Perl的正则表达式来删除节点在XML
- 17. 删除回车用正则表达式
- 18. 正则表达式中删除匹配
- 19. 删除在正则表达式
- 20. 正则表达式中的perl正则表达式
- 21. 使用Perl的正则表达式
- 22. 正则表达式使用Perl
- 23. 使用Perl的URL正则表达式
- 24. 正则表达式删除除
- 25. 使用正则表达式删除点删除*太
- 26. 在考虑在Perl正则表达式Perl的正则表达式
- 27. perl正则表达式多个组
- 28. perl正则表达式多行
- 29. Notepad ++正则表达式删除样式
- 30. 使用正则表达式在Javascript中删除HTML评论
'[^ _] * _'是你的正则表达式。第一部分匹配下划线的所有内容,_匹配它自己。 –
'my @var = split(/ _ /,$ str); $ str = $ var [1];' –
@BradKoch - 不完全。你忘了一个*或一个+修饰符。您的正则表达式目前只匹配一个非下划线,后跟一个下划线。现在我看起来像个疯子:-) –