tit*_*cus 0 regex perl extract
我想使用Perl正则表达式从文件名中提取某些值.他们有以下(有效)名称:
testImrrFoo_Bar001_off
testImrrFooBar_bar000_m030
testImrrFooBar_bar231_p030
Run Code Online (Sandbox Code Playgroud)
从上面我想提取前三个数字(总是保证为3),以及字符串的最后一部分,在最后一个之后_(也就是off,或(m或p)后跟3个数字).所以我要提取的第一件事是3位数,第二位是字符串.
我推出了以下方法(我意识到这可能不是最优/最好的方法):
my $marker = '^testImrr[a-zA-z_]+\d{3}_(off|(m|p)\d{3})$';
if ($str =~ m/$marker/)
{
print "1=$1 2=$2";
}
Run Code Online (Sandbox Code Playgroud)
哪里只有$1一个有效的结果(即我想要的最后一点信息),但$2结果是空的.关于如何在中间获得这3位数的任何想法?
你快到了.
只是:
- 通过添加括号来捕获三位数:(\d{3})
- 不要m|p通过?:在它之前的括号之后添加来捕获((?:m|p)),或者使用[mp]:
^testImrr[a-zA-z_]+(\d{3})_(off|[mp]\d{3})$
Run Code Online (Sandbox Code Playgroud)
你会得到:
1=001 2=off
1=000 2=m030
1=231 2=p030
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |