C# 在带引号的字符串中搜索特定字符

C# 在带引号的字符串中搜索特定字符,c#,regex,visual-studio-2010,C#,Regex,Visual Studio 2010,我对正则表达式一无所知,但我计划很快掌握它。目前,我需要您的帮助来完成以下任务: 我想找到文字/引号(“)字符串之间的所有逗号(,) 例如: "bla bla , bla bla" 而且: "," 但如果它是一个参数分隔符,则不会,例如: Replace("abc","b","f") 如果你知道regexp,也许这很简单,但对我来说还不是(还);。你可以这样开始 "[^"]*" 这是匹配引用内容的最简单方法。然后更改它以匹配逗号模式 "[^",]*,[^"]*" 但是你不想捕捉逗号,所

我对正则表达式一无所知,但我计划很快掌握它。目前,我需要您的帮助来完成以下任务:

我想找到文字/引号(“)字符串之间的所有逗号(,)

例如:

"bla bla , bla bla"
而且:

","
但如果它是一个参数分隔符,则不会,例如:

Replace("abc","b","f")

如果你知道regexp,也许这很简单,但对我来说还不是(还);。

你可以这样开始

"[^"]*"
这是匹配引用内容的最简单方法。然后更改它以匹配逗号模式

"[^",]*,[^"]*"
但是你不想捕捉逗号,所以你把它作为一个组

"[^",]*(,)[^"]*"
然后,为了能够在一个字符串中找到多个逗号,可以对非捕获组使用重复

"(?:[^",]*(,))+[^"]*"
这应该对你有用,正则表达式有一定的局限性,正确使用时效果最好。上面的模式查找引号,查找不是逗号引号的内容,然后继续查找。它基于第一组的重复,这样可以在字符串中找到逗号(进行匹配时,您将在该组的Captures属性中访问它们)

这是您的最终解决方案,但您必须检查
组[1]
是否成功,因为现在如果模式找到带引号的字符串,则模式是成功的,但是捕获组
组[1]
没有

var regex = new Regex("\"(?:[^\",]*(,))+[^\"]*\"|\"[^\"]*\"");
var m = regex.Match("a,b,c");
if (m.Groups[1].Success)
{
    // Do your thing ;)
}

你从这样的事情开始

"[^"]*"
这是匹配引用内容的最简单方法。然后更改它以匹配逗号模式

"[^",]*,[^"]*"
但是你不想捕捉逗号,所以你把它作为一个组

"[^",]*(,)[^"]*"
然后,为了能够在一个字符串中找到多个逗号,可以对非捕获组使用重复

"(?:[^",]*(,))+[^"]*"
这应该对你有用,正则表达式有一定的局限性,正确使用时效果最好。上面的模式查找引号,查找不是逗号引号的内容,然后继续查找。它基于第一组的重复,这样可以在字符串中找到逗号(进行匹配时,您将在该组的Captures属性中访问它们)

这是您的最终解决方案,但您必须检查
组[1]
是否成功,因为现在如果模式找到带引号的字符串,则模式是成功的,但是捕获组
组[1]
没有

var regex = new Regex("\"(?:[^\",]*(,))+[^\"]*\"|\"[^\"]*\"");
var m = regex.Match("a,b,c");
if (m.Groups[1].Success)
{
    // Do your thing ;)
}

您正在尝试检查是否存在逗号、使用逗号获取引号字符串或其他内容?正则表达式将根据您需要完成的内容而变化您正在尝试检查是否存在逗号、使用逗号获取引号字符串或其他内容?正则表达式将根据您需要完成的内容而变化,这也将与“a”、“b”匹配(他要求不匹配)@约翰:谢谢,我会试试。如果你知道搜索代码文件的更好的方法/工具,那么请告诉我。这个perse不需要使用regexp/VS。@yoavmatchulsky:我在约翰发布答案期间或之后,用这个额外的要求编辑了我的问题,所以他不知道。好吧,这是个问题,但我知道如何解决。请看我的回答修改后的答案。此外,正则表达式也有局限性,如果你发现自己遇到了麻烦,那么正则表达式可能不是答案。虽然这很简单,但对于你的情况来说,它可以工作,但是lexer/parser的东西(要复杂得多)一般来说,处理这类东西会做得更好。尽管工作量要大得多。更复杂的情况可以通过递归方式应用不同的正则表达式来解决,但我建议大多数情况下不要这样做。这也会匹配“a”、“b”(他要求不匹配)@约翰:谢谢,我会试试。如果你知道搜索代码文件的更好的方法/工具,那么请告诉我。这个perse不需要使用regexp/VS。@yoavmatchulsky:我在约翰发布答案期间或之后,用这个额外的要求编辑了我的问题,所以他不知道。好吧,这是个问题,但我知道如何解决。请看我的回答修改后的答案。此外,正则表达式也有局限性,如果你发现自己遇到了麻烦,那么正则表达式可能不是答案。虽然这很简单,但对于你的情况来说,它可以工作,但是lexer/parser的东西(要复杂得多)一般来说,处理这类事情会做得更好。不过,这需要做更多的工作。更复杂的情况可以通过递归方式应用不同的正则表达式来解决,但我建议大多数情况下不要这样做。