我有一些与文件名相关的文本,这些文件名在文本中散布如下:
|test.txt|
|usr01.txt|
|usr02.txt|
|foo.txt|
我希望匹配不以
usr
开头的文件名。我想到了使用(?<=\|).*\.txt(?=\|)
来匹配文件名,但它并不能排除以usr
开头的文件。正则表达式能实现这个功能吗?我有一些与文件名相关的文本,这些文件名在文本中散布如下:
|test.txt|
|usr01.txt|
|usr02.txt|
|foo.txt|
usr
开头的文件名。我想到了使用(?<=\|).*\.txt(?=\|)
来匹配文件名,但它并不能排除以usr
开头的文件。正则表达式能实现这个功能吗?(?<=\|)(?!usr).*\.txt(?=\|)
你已经接近成功了 :)
现在你拥有了一个正向回顾先行断言,以及一个正向和负向预查。
使用Python
>>> import re
>>>
>>> x="""|test.txt|
... |usr01.txt|
... |usr02.txt|
... |foo.txt|
... """
>>>
>>> re.findall("^\|(?!usr)(.*?\.txt)\|$",x,re.MULTILINE)
['test.txt', 'foo.txt']
grep -v "^|usr" file
awk '!/^\|usr/' file
sed -n '/^|usr/!p' file