我將如何去除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. 使用正則表達式刪除HTML
- 2. 刪除使用正則表達式
- 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. 正則表達式中的perl正則表達式
- 18. 正則表達式中刪除匹配
- 19. 刪除在正則表達式
- 20. 正則表達式使用Perl
- 21. 使用Perl的URL正則表達式
- 22. 使用Perl的正則表達式
- 23. 使用正則表達式刪除點刪除*太
- 24. 正則表達式刪除除
- 25. 在考慮在Perl正則表達式Perl的正則表達式
- 26. 使用正則表達式刪除多個標記
- 27. 刪除列表中的正則表達式與Python中的正則表達式
- 28. perl正則表達式多行
- 29. perl正則表達式多個組
- 30. perl正則表達式匹配多行
'[^ _] * _'是你的正則表達式。第一部分匹配下劃線的所有內容,_匹配它自己。 –
'my @var = split(/ _ /,$ str); $ str = $ var [1];' –
@BradKoch - 不完全。你忘了一個*或一個+修飾符。您的正則表達式目前只匹配一個非下劃線,後跟一個下劃線。現在我看起來像個瘋子:-) –