Microsoft Excel中的正则表达式子串替换

Ben*_*Ben 7 regex excel

我想用国际版"447"批量替换字符串列表(移动电话号码)的"07"部分.

字符串列表当前在Excel电子表格中形成一个列.

我有正则表达式来匹配需要修改的字符串:

^07[0-9]{9}$
Run Code Online (Sandbox Code Playgroud)

...但我不知道如何进行我需要的替换.

数据位于Excel电子表格中,但当然可以导出.

首选解决方案是将数据保存在Microsoft Excel中,但它当然可以导出然后重新导入.我知道TextMate有一个正则表达式替换功能.这可以帮到我吗?

Aak*_*shM 17

我正准备寻找优雅的VBA解决方案或其他什么,然后我想:'坚持下去.我们只想操纵我们拥有的电子表格中的一些数据.为什么复杂化?'

这个想法对你来说如何:

  • 在具有现有数据的列之后插入一个新列(假设它是C列)

  • 使用以下公式填充新列: ="447" & RIGHT(C1, 9)

  • 选择列D(现在包含新值)和粘贴值(在"选择性粘贴"对话框中)到列C上,替换现有值

  • 删除'工作'列D.

这不是编程,但如果你不需要一个程序就必须这样做,对吗?

  • 从这个问题来看,并不是所有的电话号码都需要转换(即它们并非都是从07开始).只需要在IF中包含上面的公式来处理:= IF(左(C1,2)="07","447"和右(C1,9),C1) (6认同)

Tom*_*lak 11

使用Excel VBA.引用"Microsoft VBScript Regular Expressions 5.5".

然后,在新的常规VBA模块中:

Sub ReplaceMobileNumbers
  Dim re as New RegExp

  re.Pattern = "^0(?=7[0-9]{9}$)"   ''# look-ahead

  Dim cell As Range
  For Each cell In ActiveSheet.Range("Your Range Address in A1:B1 notation")
   cell.Value = re.Replace(cell.value, "44")
  Next cell
End Sub
Run Code Online (Sandbox Code Playgroud)

并在立即窗口中调用此子.以上是丢失的代码,没有考虑到可重用性.我知道,所以不要告诉我.;-)

虽然你可以逃脱细胞功能:

=IF(AND(LEN(A1) = 11;LEFT(A1; 2) = "07"); "44" & RIGHT(A1; 10); A1)
Run Code Online (Sandbox Code Playgroud)


Cha*_*aos 9

您必须在工作表中包含Microsoft正则表达式(将其添加为参考)

然后制作一个快速宏,如下所示,使用它:

Dim reg As New RegExp
Public Function RegMatch(Source As Range, Pattern As String, Optional IgnoreCase As Boolean = True, Optional MultiLine As Boolean = True) As Long
    Dim rng As Range, i As Long, j As Long

    reg.IgnoreCase = IgnoreCase
    reg.MultiLine = MultiLine
    reg.Pattern = Pattern

    i = 0: j = 0
    For Each rng In Source
        i = i + 1
        If reg.test(rng.Value) Then
            j = i
            Exit For
        End If
    Next
    RegMatch = j
End Function
Run Code Online (Sandbox Code Playgroud)

然后,只需将其称为工作表中的宏(例如):

=INDEX(B6:B15, RegMatch($A$6:$A$15, $A$3))
Run Code Online (Sandbox Code Playgroud)

第一个参数是你的范围,第二个参数是你的模式(如上所述)