这已经过去但是我找不到任何可以持续工作的东西......或者协助我学习我出错的地方。
我的文件名以3位或更多位数开头,而^\d{3}(.*)
效果很好。
我也有以“帐户”一词开头的字符串,^ACCOUNT(.*)
可以正常使用。
我遇到的问题是所有其他字符串都不符合之前的两个标准。我一直在使用^[^\d{3}][^ACCOUNT](.*)
,但偶尔也没能抓到它。
任何见解将不胜感激。
答案 0 :(得分:1)
^[^\d{3}][^ACCOUNT](.*)
那绝对不是你想要的。方括号创建字符类:它们匹配括号中字符列表中的一个字符。如果您输入^
,则匹配将被反转,并且匹配一个 列出的字符。括号内^
的含义与其外部含义完全不同。
简而言之,[]
根本不是你想要的。如果您的正则表达式实现支持, 可以做的是使用negative lookahead断言。
^(?!\d{3}|ACCOUNT)(.*)
这种负面的先行断言本身并不匹配任何东西。它仅检查字符串(.*)
的下一部分是否与\d{3}
或ACCOUNT
不匹配。
答案 1 :(得分:0)
Demorgan的法律说:!(A v B) = !A ^ !B
。
但遗憾的是Regex本身确实如此 不支持表达式的否定。 (你总是可以重写它,但有时候,这是一项艰巨的任务)。
相反,您应该查看您的编程语言,您可以毫无问题地否定值:
让“匹配”函数为“匹配”,并使用match("^(?:\d{3}|ACCOUNT)(.)")
来确定字符串是否与两个条件之一匹配。然后你可以简单地否定匹配函数的布尔返回值,你将收到每个不匹配的字符串。