部分使用Regex替换多个单词

时间:2012-07-12 10:38:53

标签: regex

我希望处理大量文件,作为代码迁移后的一部分。迁移工具可以处理RegEx,我们写下面的内容:
'#Replace'.Columns(“,”。。Columns.Item(“ 这取代了所有出现的“.Columns”(“with”.Columns.Item(“。

作为我们的要求之一,我想用双引号替换NullString字,即“” 例如。可选ByVal strID2 As String = NullString
应该成为 可选ByVal strID2 As String =“”

这是必需的,因为VB6中的NullString现在变成了一个类变量,而在函数声明中它需要是一个常量。
因此,我需要一个RegEx,其中一个标准如下:

  1. 确保它在功能声明中,即单词“功能”然后它的名称并打开一个括号“(”。然后,任何出现的[= NullString]应该替换为[=“”],直到我们点击结束括号“) “,因为声明可能在多行。
  2. 看看它的Optional参数是否正确。所以匹配单词“Optional”然后“As String = NullString”并用“”替换NullString。
  3. 我可以使用2中的一个作为标准,但无法编写RegEx。下面是我的示例文件,我已经解释了我想要的每一行。


    我的简单文件内容

    第1行 Public Function getAllAddresses(ByVal lngObjectType As String, ByVal strID1 As String, Optional ByVal strID2 As String = NullString, Optional ByVal strID3 As String = NullString, Optional ByVal blnExtraAddresses As Boolean = False, Optional ByRef objDataRequest As CDataRequest = Nothing) As ADORecordset
    第2行 :Dim s为String
    第3行 s = NullString
    第4行 (空白):
    第5行 Public Function getDefaultPaymentAddress(ByVal lngObjectType As Integer, ByVal strID1 As String, ByVal strID2 As String, Optional ByRef objDataRequest As CDataRequest = Nothing) As typAddress
    第6行 Public Function myfunc(Optional ByVal strID2 As String = NullString, _
    第7行 Optional ByVal strID3 As String = NullString, _
    第8行 Optional ByVal blnExtraAddresses As Boolean = False, _
    第9行 Optional ByRef objDataRequest As CDataRequest = Nothing) As String
    第10行 'Some code comments with = NullString
    更多行 直到文件结尾


    每行的预期 输出

    1. 第1行:作为一个大行只输出整个声明,用NullString替换为引号,即“”。
    2. 第2行:因为它是
    3. 第3行:因为它是[注意不应该替换NullString ]
    4. 第4行:因为它就是空白
    5. 第5行:原样。这里没有NullString所以不匹配
    6. 第6行到第9行:2个NullString替换为双引号(第6行和第7行)
    7. 第10行:照原样。这只是一个评论。
      我可能会有类似If myVar = NullString Then的内容,但不应该匹配和替换 在此先感谢您的帮助。
      问候,
      NIK

1 个答案:

答案 0 :(得分:1)

使用一个正则表达式无法进行所有更改。

您可以尝试以下方法:

' Repeat this until there are no more changes.
Search: (Function +\w+ *\([^)]*?)\bNullString\b
Replace: $1""

' Use a multiline match for this one.
Search: ^([ \t]*\w+ *= *)NullString\b
Replace: $1""