0
fadjfl (10) fdaf
fadjfl dafhaj (10)
fadjfl dafhaj 34 (10)
fadjfl dafhaj 34 dafads      (10)
fadjfl dafhaj 34 dafa(ds) ((  (10)
fadjfl 
fadjfl dafhaj 
fadjfl dafhaj 34 
fadjfl dafhaj 34 dafads      
fadjfl dafhaj 34 dafa(ds) ((

我需要正则表达式,它将选择除(10)之外的所有内容

4

3 回答 3

3

如果您不询问有关正则表达式的理论问题,您应该始终指定一个实现(PHP、Javascript、.NET 等),无论如何这可能属于 cs.stackexchange.com。

不过,首先,如果您只想要 之前的字符串\(\d+\),那么:

(.*?)(?:\(\d+\)|$)

如果您想要所有内容,那么如果您可以有多个带括号的数字,那实际上是不可能的。有限数是可能的,例如3:

(.*?)(?:\(\d+\)|$)(.*?)(?:\(\d+\)|$)(.*?)(?:\(\d+\)|$)

除非您使用 .NET:

((.*?)(?:\(\d+\)|$))*

之后,您可以循环浏览GroupCollection.

于 2013-02-07T17:49:10.250 回答
1

如果您的意思是要从每行的开头匹配到每行的"(10)"结尾,并且假设您使用的是能够进行前瞻的工具,则可以使用以下内容:

.*?(?=\(10\)|$)

它将匹配所有内容,直到出现以下字符"(10)"(但不包括"(10)")或到达行尾。在这种情况下使用非贪婪量词 ( .*?) 很重要,否则正则表达式每次都会匹配整行。

如果您的意思是要匹配整个文档,"(10)"那么您可以轻松使用任何类型的字符串替换功能,替换"(10)""".

于 2013-02-07T17:47:01.783 回答
1

一个不match()包含某些东西的正则表达式会非常复杂。相反,只需删除您不想要的部分:

myStr.replace(/\(\d+\)/, "")
myStr.split(/\(\d+\)/)
于 2013-02-07T17:55:09.127 回答