[英]Regular Expression - Perl
我正在嘗試使用正則表達式從字符串中獲取子字符串,但由於我的正則表達式無法正常工作而出現錯誤。 誰能幫助我寫出正確的答案:
這是我要在其上編寫正則表達式的模式:
MSM8_BD_V4.3_1-1_idle-Kr_Run3.xlsx
MSM8_BD_V4.3_2-6_mp3-Kr_Run2.xlsx
MSM8_BD_V4.3_Camera_snap-7.xlsx
MSM8_BD_V4.3_Camera_snap-8.xlsx
MSM8_BD_V4.3_Radio_202.16-0.xlsx
我正在嘗試獲取子字符串的粗體部分 。
以下是我嘗試過的正則表達式:
my $line = "MSM8939_BD_V4.3_1-1_idle-Kratos_Run3.xlsx";
my ($captured) = $line =~ /MSM8939_BD_V4\.\3\_[d]*(.+?)\w/gx;
print "$captured\n";
[d]
匹配字母d
。 您希望\\d
(不帶括號)匹配一個數字。 但是,您似乎也想包含下划線。 那將是[\\d_]
。
嘗試這個:
/^MSM8_BD_V4\.3_[\d_]*-?([^-]+)/
如果我在您的輸入上運行它(例如,使用perl -nE 'say $1 if /^MSM8_BD_V4\\.3_[\\d_]*-?([^-]+)/'
), perl -nE 'say $1 if /^MSM8_BD_V4\\.3_[\\d_]*-?([^-]+)/'
得到以下輸出:
1_idle
6_mp3
Camera_snap
Camera_snap
Radio_202.16
my $line = "MSM8939_BD_V4.3_1-1_idle-Kratos_Run3.xlsx";
for (qw(
MSM8939_BD_V4.3_1-1_idle-Kratos_Run3.xlsx
MSM8939_BD_V4.3_2-6_mp3-Kratos_Run2.xlsx
MSM8939_BD_V4.3_Camera_snap-7.xlsx
MSM8939_BD_V4.3_Camera_snap-8.xlsx
MSM8939_BD_V4.3_Radio_202.16-0.xlsx
)) {
my ($captured) = ($_ =~ /.*[-_]([^\W_]+_[\w.]+)-/gx);
print "$captured\n";
}
使用貪婪的模式盡可能地走,然后抓住看起來像您想要的最后兩個字符串,它們后面仍然帶有連字符。
正如我在鍵入時剛剛編輯的其他答案一樣,它產生:
1_idle
6_mp3
Camera_snap
Camera_snap
Radio_202.16
該MSM8_BD_V4.3
可能更通用,因為子字符串的開頭不是硬編碼的,也就是說,您可以在不一定以MSM8_BD_V4.3
開頭的其他情況下使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.