我正在寻找代码中忘记忘记为第三个参数添加'true'的实例,这使其不区分大小写。
代码看起来像String.Compare("stringA", varB)
或String.Compare(varA, "stringB", true)
,而我想使用regex查找仅使用两个参数的情况的所有实例。
到目前为止,我想到了:String.Compare\([^,\n]*((,[^,\n]*?))\)
,它适用于简单的情况,但是我不确定如何处理诸如参数末尾带有.ToString()
之类的东西。
如果有人对我如何改善我的正则表达式有任何建议,甚至对我的问题有完全不同但更有效的解决方案,那就太好了!
编辑:只是想提一下,有时它可能分成不同的行:
if (String.Compare(varA.ToString(),
varB.ToString().Trim(),
StringComparison.OrdinalIgnoreCase) != 0)
答案 0 :(得分:0)
可能需要改进一些地方。如果不需要捕获组,则可以忽略它们,将它们变成非捕获(?:
。还有一个双重捕获组((
,您可以在其中省略外部捕获组。
您可以在String.
之后转义点,否则它将匹配除换行符以外的任何字符。
在否定的字符类中,您不匹配,
或\n
,但是如果没有右括号,您也可以像[^,\n)]
一样将其添加到括号中。
您也可以删除[^,\n]*?
之后的问号,以免贪婪。
您的表情可能像这样:
String\.Compare\([^,\n)]*(?:,[^,\n)]*)\)
如果要匹配所有以点开头的非空格字符,则可以添加一个可选的非捕获组:
String\.Compare\([^,\n)]*(?:,[^,\n)]*)\)(?:\.\S+)?
如果String不应该是较大单词的一部分,则可以在单词边界\bString
之前加上
答案 1 :(得分:0)
这应该可行,并且不要忘记忽略大小写:
String\.Compare\([^,]*(?:,[^,()]*)(\(\))?\);$
答案 2 :(得分:0)
假设这是一项一次性任务,那么我将使用Notepad ++分几步来完成它。
String.Compare
的行。使用“查找和替换”对话框的“标记”选项卡,确保选中“书签行”。String.Compare
的行都被标记。String\.Compare\([^,\n]*,[^,\n]*, *true\);$
进行标记行。这会在具有所需true
的字符串比较行上添加标记。注意正则表达式中的最后一个;$
。它确保true
确实是调用的第三个参数,并且与该行前面的true
不匹配。 \.ToString()
子句不需要任何额外的内容String.Compare
行上都没有标记,而这些标记没有将通缉的true
作为行上的第三个参数。总结一下:查找(并标记)确定的行,然后反转标记以突出显示可能需要注意的行。
为响应已更改的问题,将步骤3中的正则表达式更改为
String\.Compare\([^,]*,[^,]*,\s*true\)(\s*!=\s*0\))?$
甚至
String\.Compare\([^,]*,[^,]*,\s*StringComparison\.\w+\)(\s*!=\s*0\))?$
。
此更改允许第三个参数为StringComparison
枚举,并且还可以将比较结果与零进行比较。
将正则表达式更改为String\.Compare\([^,]*,[^,]*,\s*(true|StringComparison\.\w+)\)(\s*!=\s*0\))?$
应该允许true
或StringComparison
枚举作为第三个参数。通常,我反对使用这种复杂的正则表达式。他们变得难以理解和难以增强。对于诸如此问题中的任务以及此答案中给出的解决方案的样式,最好在上面的步骤3中执行两个或多个使用不同表达式的标记行运算。