簡體   English   中英

正則表達式-Perl

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM