C# 正则表达式是否包含非捕获组中的字符?

C# 正则表达式是否包含非捕获组中的字符?,c#,.net,regex,C#,.net,Regex,我有一首歌的名字像: 我正在努力与标题相匹配,无法停止。我使用regexr和expresso的混合体生成了这个正则表达式: (.*)(?:\(?ft|feat) 它与它们都匹配,除了不能停止在匹配中似乎包含括号的位置。我显然做错了什么,但我已经玩了4个小时了,我弄不清楚它是什么,请给我指出正确的方向。这个。*就是所谓的贪婪,它将匹配开头部分。由于您后来指定期初参数是可选的,因此此可选部分不匹配。要排除它,可以使用[^]*来代替。这个。*就是所谓的贪婪,它将匹配开始部分。由于您后来指定期初参数是

我有一首歌的名字像:

我正在努力与标题相匹配,无法停止。我使用regexr和expresso的混合体生成了这个正则表达式:

(.*)(?:\(?ft|feat)
它与它们都匹配,除了不能停止在匹配中似乎包含括号的位置。我显然做错了什么,但我已经玩了4个小时了,我弄不清楚它是什么,请给我指出正确的方向。

这个。*就是所谓的贪婪,它将匹配开头部分。由于您后来指定期初参数是可选的,因此此可选部分不匹配。要排除它,可以使用[^]*来代替。

这个。*就是所谓的贪婪,它将匹配开始部分。由于您后来指定期初参数是可选的,因此此可选部分不匹配。要排除它,可以使用[^]*代替。

?:\?ft?专长与专长不匹配,因为\?只是|左侧的一部分。它将匹配ft或专长,但不匹配专长。既然你想知道一个专长是否缩写,你应该移动\?在……之外

在你解决了这个问题之后,你仍然有贪婪的问题@動靜能量 已提到,您可以通过附加来修复哪些问题?添加到。*,使其仅匹配所需的最小字符数

这就给出了这个,它适用于所有的例子:.*?:ft|feat

?:\?ft|feat与feat不匹配,因为\?只是|左侧的一部分。它将匹配ft或专长,但不匹配专长。既然你想知道一个专长是否缩写,你应该移动\?在……之外

在你解决了这个问题之后,你仍然有贪婪的问题@動靜能量 已提到,您可以通过附加来修复哪些问题?添加到。*,使其仅匹配所需的最小字符数


这就给出了这个,它适用于你所有的例子:.\\:ft|feat

我设法用这个来修复它

(.+?)(?:\(|ft|feat)

我设法用这个把它修好了

(.+?)(?:\(|ft|feat)
这项工作:

(.*?)(?=\(?(ft|feat))
它总结了其他答案中所说的贪婪和优先问题,并使用了积极的前瞻性。

这是有效的:

(.*?)(?=\(?(ft|feat))

它总结了其他答案中所说的贪婪和优先问题,并使用了积极的前瞻性。

泰勒现在,您的答案将只匹配开放括号中的输入,或者在没有专长或英尺的情况下匹配输入。
我建议您跳过使用括号,或者像下面这样使用。+?:\?ft | feat

泰勒现在您的答案将与输入匹配,只需打开括号,或者即使没有feat或ft。
我建议你不要使用括号,或者像下面这样使用。+?:\?ft|feat

neat,我用来在飞行中检查正则表达式的一个好工具是rubular,@OliverAtkinson这是一个很棒的工具,可以添加到我的收藏中,我通常使用Regexr,但是有一个备份是没有坏处的:neat,我用来在飞行中检查正则表达式的一个好工具是rubular,@OliverAtkinson这是另一个很棒的工具,可以添加到我的收藏中,我通常使用Regexr,但是有一个备份也没什么坏处:如果贪婪是唯一的问题,那就行了,但实际上它也是优先的;看看我的答案。@MarkReed贪婪也是一个问题,如果贪婪是唯一的问题的话,它也会起作用,但实际上它也是优先的;“看我的答案。”马克里德的贪婪也是一个问题