批量搜索和替换为通配符或Reg表达式MyString.Length到Len(MyString)

时间:2010-10-14 21:26:30

标签: regex vb.net notepad++ replace

我有一个大型的ASP.NET项目,我想进行大规模搜索和替换(大约3500个实例)

我想改变

If strErrorMessage.Length > 0

If strSomeString.Length > 0

If strWhatever.Length > 0

以及从字符串到以下

的任何其他类似的Length方法调用
If Len(strErrorMessage) > 0

If Len(strSomeString) > 0

If Len(strWhatever) > 0

无论如何要一次性可靠地做到这一点?

我可以搜索并替换类似

的内容
If *.Length > 0 --> If Len(*) > 0 

这不会起作用,因为它不会理解如何正确地重新排列它。目前我可以使用VS2010和N ++。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

关于艾哈迈德的评论。这里可能的原因是 length 方法是实例方法,因此,如果对空字符串变量调用,则会出错。

另一方面,LEN更像是一个扩展方法,无论字符串是否为null还是不包含字符的字符串,都只返回0。在我看来,Len的工作更像是 len

但回到这个问题。

你签了吗

http://rxfind.codeplex.com/

正则表达式命令行搜索和替换工具。这应该可以快速完成这项工作。

答案 1 :(得分:1)

使用Visual Studio查找/替换(启用了正则表达式选项),您可以使用:

查找内容: If {:a+}\.Length \> 0

替换为: If Len(\1) \> 0

模式说明:

  • :a+ = :a匹配字母数字字符,+至少匹配一次
  • {} in {:a+} = Visual Studio正则表达式“标记”(即捕获)表达式的方式
  • \> =必须使用反斜杠对>进行转义,因为它是此正则表达式中的元字符。
  • \1 =指的是标记表达式中匹配的文本。数字1指的是第一个(在这种情况下是唯一的)标记表达式。

您可以阅读有关查找/替换here的MSDN正则表达式引用的更多信息。

正如我在评论中提到的,我认为使用Len()是向后退一步,将代码绑定到Microsoft.VisualBasic命名空间。 @drventure brought up a good point但是,因为在空值上调用.Length会抛出异常。您可以使用String.IsNullOrEmpty而不是检查长度。在.NET 4.0中,您还可以使用String.IsNullOrWhiteSpace

您可以使用以下If strErrorMessage.Length > 0代替:

If Not String.IsNullOrEmpty(strErrorMessage) Then
' or '
If Not String.IsNullOrWhiteSpace(strErrorMessage) Then

如果您对使用此功能感兴趣,可以保留原始的“查找内容”模式,并将“替换为”模式更改为:If Not String.IsNullOrEmpty(\1)