如何格式化reg.exp。忽略搜索中的匹配文本。我们的文档格式如下:
ProductType_ [尺寸] [密度] .PDF
因此,在典型的文件夹中,文件列表为:
RN_HG_HighDry_001x450.pdf
RN_HG_HighDry_001x895.pdf
RN_HG_HighDry_002x136.pdf
RN_HG_HighDry_002x887.pdf
RN_HG_HighDry_FULL_5.pdf
RN_HG_HighDry_FULL2.pdf
我可以使用以下方法选择包含塑料尺寸的文件:
(\d{3}x\d{3}\.pdf$)
(我们指定pdf,因为有时文件夹包含其他无关的文件)
但我想创建一个表达式来选择没有塑料尺寸的pdf(但是有/没有密度大小),所以在英语中我想要做的是选择所有.pdf文件,除了那些包含字符串的文件(三个数字,字母'x',三个数字)。
我尝试过([^\d{3}x\d{3}]\d\.pdf$)
,我认为开始时的[^
表示不是,但它不起作用。我也尝试了各种其他排列但无济于事。我今晚一直梦想着Reg.Exps,因为我已经玩了很长时间了!
答案 0 :(得分:1)
使用方括号[]
创建一个字符类,这意味着这样的类匹配类中的所有字符。你是对的,以^
开头的角色类意味着不是,但在另一种意义上。它意味着匹配任何角色,但不匹配类中的角色。
[^\d{3}x\d{3}]
将匹配任何字符,但不匹配数字,不是{
,不是}
而不是x
如果您的语言支持先行断言,则可以执行此操作
(?!^.*\d{3}x\d{3})\d\.pdf$
(?!^.*\d{3}x\d{3})
是一个负前瞻断言,它将检查整个字符串,如果找不到\d{3}x\d{3}
,断言将为真,它会尝试匹配\d\.pdf$
答案 1 :(得分:0)
如果你不支持负向前瞻,你基本上必须枚举你想要捕捉的模式。对于您的特定应用,为什么不排除那些您知道如何匹配的应用,并保留其余的应用?您没有提到您正在使用的编程语言或匹配程序,而是
vnix$ egrep -v '_[0-9]{3}x[0-9]{3}\.pdf$' listoffilenames | grep '\.pdf$'
从您提供的有限示例中,正面的正则表达式可能类似于
vnix$ egrep '[^0-9][0-9]\.pdf$' listoffilenames
会起作用,但我希望你想要一个覆盖率更高的正则表达式来捕获在.pdf扩展名之前根本没有任何数字的文件。稍微宽泛的模式可能是
vnix$ egrep '([^0-9]|[^0-9][0-9]{1,2}|[^x][0-9]{3})\.pdf$' listoffilenames
如果您仍需要帮助,请详细说明您的需求。