Regex 条件正则表达式问题
我有一个正则表达式的问题,我想我在正则表达式的实际工作方式上遗漏了一点 我有一些包含方法定义的字符串集Regex 条件正则表达式问题,regex,Regex,我有一个正则表达式的问题,我想我在正则表达式的实际工作方式上遗漏了一点 我有一些包含方法定义的字符串集 myMethod1() myMethod2(argument1 arg1) myMethod3(参数1 arg1,参数2 arg2) 但其中一些还包含输出类型: myOtherMethod1():类型1 myOtherMethod2(argument1 arg1):类型2 myOtherMethod3(argument1 arg1,argument2 arg2):随便什么 我只想要像第
- myMethod1()
- myMethod2(argument1 arg1)
- myMethod3(参数1 arg1,参数2 arg2)
- myOtherMethod1():类型1
- myOtherMethod2(argument1 arg1):类型2
- myOtherMethod3(argument1 arg1,argument2 arg2):随便什么
(?([:]+)(.+(?=\s:))|(.+))
如果我匹配字符串中的“:”字符,则取“:”之前的任何字符,如果不匹配,则取全部。
理论上这是正确的,但它返回整行
如果我把正则表达式改为
(?([:]*)(.+(?=\s:))|(.+))
然后第二类方法被正确地正则化了,但第一类方法没有(奇怪..)。
你能解释一下我的错误在哪里吗
非常感谢,没有必要这样处理。只需使用您遇到的右括号中的第一个:
/^[^)]*\)/
除非我误解了你的问题…我不知道你的正则表达式有什么问题。我会使用一个更简单的正则表达式,并与您想要的匹配:
^.*\)
这与行的开头匹配,后跟任意字符,后跟)
。)
后面可能有文本这一事实与此无关 我想出了^(.*?\).$
这将匹配字符串的开头(^
),后跟第一个右括号内的所有字符(*?
是惰性匹配,因此它将匹配第一个)
(转义字符串需要\)
)。该行的其余部分将被忽略(*$
)-请使用多行选项,否则将只匹配第一部分。
额外的括号是捕获组,因此您可以使用$1作为替换。实际上您的解决方案非常有效,我解决问题的方法不是很好。谢谢我仍然不明白为什么我的正则表达式不起作用,理论上它应该是对的?不。我想你可能想在条件语句之前使用
*
(即(?(.[:]*)…
)。当然你不需要[:]
,因为这与:
((.:+)(.+(((?=\s:))|(.+)')一样(应用这两个注释的修改版本也不起作用。它有两个匹配项:例如“myOtherMethod1():type1”给出了两个匹配项:“myOtherMethod1()”和“type1”@Srodriguez,完全符合它的要求。删除最后一组()(.+)
)以不匹配“type1”部分。