正则表达式匹配不以子字符串开头的文本?

3

我有一些与文件名相关的文本,这些文件名在文本中散布如下:

|test.txt|
|usr01.txt|
|usr02.txt|
|foo.txt|

我希望匹配不以usr开头的文件名。我想到了使用(?<=\|).*\.txt(?=\|)来匹配文件名,但它并不能排除以usr开头的文件。正则表达式能实现这个功能吗?
3个回答

7
(?<=\|)(?!usr).*\.txt(?=\|)

你已经接近成功了 :)

现在你拥有了一个正向回顾先行断言,以及一个正向和负向预查。


我曾经尝试过使用单个后顾,但是遇到了困难。诀窍在于使用组合。干得好先生。 - Gishu

1

使用Python

>>> import re
>>>
>>> x="""|test.txt|
... |usr01.txt|
... |usr02.txt|
... |foo.txt|
... """
>>>
>>> re.findall("^\|(?!usr)(.*?\.txt)\|$",x,re.MULTILINE)
['test.txt', 'foo.txt']

-1
grep -v "^|usr" file

awk '!/^\|usr/' file

sed -n '/^|usr/!p' file

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接