- 此问题在此处已有答案**:
(9个答案)
4天前关闭。
我正在尝试将汽车信息文本解析为分号分隔的文件。字段应该是年份、制造商、型号、密钥卡描述、FCC ID。正则表达式交替应该能够将型号与密钥卡描述分隔开。我以为交替将使用第一个匹配项,但总是在选择时选择单词Remote
,不管它在交替中的位置如何。为什么?我怎样才能让它选择Smart
而不是Remote
作为组的开始。我正在解析的文本文件:
2013 Chevrolet Tahoe Keyless Entry Remote Key Fob 6B w/ Hatch, Rear Glass, Remote Start (FCC: OUC60270 / OUC60221, P/N: 15913427)
2021 Jeep Grand Cherokee Smart Remote Key Fob 3B (FCC: M3N-40821302, P/N: 68143502AA)
2010 Acura TL Smart Remote Key Fob 4B w/ Trunk (FCC: M3N5WY8145, P/N: 72147-TK4-A71)
2006 Mazda 5 Remote Flip Key Fob 3B (FCC: BGBX1T478SKE125-01, P/N: CC43-67-5RYC)
正则表达式:
if( $row =~ /^(\d+)\s(\w+)\s(\w.*)\s(Smart|Keyless|KEYLESS|Remote)(\s\w+.*)\s\(FCC\:\s(.+)\,\s.+/ ){ print "$1;$2;$3;$4$5;$6\n" };
其结果是,它在交替中一直选择Remote
作为最佳选项:
2017;Chevrolet;Cruze;Remote Flip Key Fob 4B w/ Trunk;LXP-T004 (XL8 Model)
2013;Chevrolet;Tahoe Keyless Entry Remote Key Fob 6B w/ Hatch, Rear Glass,;Remote Start;OUC60270 / OUC60221
2021;Jeep;Grand Cherokee Smart;Remote Key Fob 3B;M3N-40821302
2010;Acura;TL Smart;Remote Key Fob 4B w/ Trunk;M3N5WY8145
2006;Mazda;5;Remote Flip Key Fob 3B;BGBX1T478SKE125-01
正则表达式选择Remote
而不是Smart
是因为它更长并且有多个匹配项吗?当一行中有多个匹配项时,我如何让它选择第一个匹配项而不是最长的匹配项?
我试过重新排列交替中的单词,但它总是选择Remote
。
1条答案
按热度按时间6jjcrrmo1#
.*
尝试匹配尽可能长的子字符串。使用?
字符将其更改为匹配最少的字符数: