对于字符串说:
test.1234.mp4
我想提取数字 1234 没有提取mp4中的4
这个正则表达式是什么?
数字并不总是位于第二个位置,可以位于不同的位置并且可能不总是四位数。我想提取数字而不提取 mp4 中的 4。
更多例子:
test.abc.1234.mp4
test.456.abc.mp4
test.aaa.bbb.c.111.mp4
test.e666.123.mp4
基本上只会提取数字。因此,对于最后一个示例,e666 中的 666 不会被提取,而只有 123。 提取我一直在使用
echo "example.123.mp4" | grep -o "REGEX"
编辑:test456 本来就是 test.456
最佳答案
接受的答案将在“test.e666.123.mp4”(打印 666)上失败。
这应该可行
$ cat | perl -ne '/\.(\d+)\./; print "$1\n"'
test.abc.1234.mp4
test.456.abc.mp4
test.aaa.bbb.c.111.mp4
test.e666.123.mp4
1234
456
111
123
请注意,这只会打印第一组数字,如果我们有 test.123.456.mp4,则只会打印 123。
我们的想法是匹配一个点后跟我们感兴趣的数字(括号保存匹配),然后是另一个点。这意味着它将在 123.mp4 上失败。
要解决此问题,您可以:
$ cat | perl -ne '/(^|\.)(\d+)\./; print "$2\n"'
test.abc.1234.mp4
test.456.abc.mp4
test.aaa.bbb.c.111.mp4
test.e666.123.mp4
781.test.mp4
1234
456
111
123
781
第一个匹配项是行首 (^) 或一个点,后跟数字和一个点。我们在这里使用 $2,因为 $1 要么是一行的开头,要么是一个点。
关于regex - 使用正则表达式提取子字符串同时排除某个短语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16478118/