我希望能够批量替换一列字符串(移动电话号码)中的“07”部分为国际版本的“447”。
这些字符串目前在Excel电子表格中形成一列。
我已经有了匹配需要修改的字符串的正则表达式:
^07[0-9]{9}$
...但我不知道如何进行所需的替换。
数据在Excel电子表格中,但当然可以导出。
首选解决方案是保留数据在Microsoft Excel中,但它当然可以被导出并重新导入。我知道TextMate有一个正则表达式替换功能。这能帮助我吗?
我本来要去寻找优雅的VBA解决方案或其他东西,然后我想:“等等。我们只想操作一些我们拥有的电子表格中的数据。为什么要把事情搞复杂呢?”
这个想法对您听起来如何:
在现有数据所在的列(假设是C列)后面插入一个新列
用这个公式填充新列:="447" & RIGHT(C1, 9)
选择新值所在的D列,使用“粘贴值”(在“粘贴特殊”对话框中)替换现有值所在的C列
删除“临时”列D
这不是编程,但如果您只需要执行一次,您并不需要编写程序,对吗?
使用Excel VBA。引用“Microsoft VBScript正则表达式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
在即时窗口中调用此子程序。上面的代码是一次性代码,没有考虑可重用性。我知道这点,所以不要告诉我。;-)
虽然您可能可以使用单元格函数:
=IF(AND(LEN(A1) = 11;LEFT(A1; 2) = "07"); "44" & RIGHT(A1; 10); A1)
您需要在工作表中包含Microsoft Regular Expressions(将其添加为引用)。
然后,制作一个快速宏,如下所示,以使用它:
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
=INDEX(B6:B15, RegMatch($A$6:$A$15, $A$3))
第一个参数为您的范围,第二个参数为您的模式(如上所述)
Microsoft VBScript正则表达式5.5
。 - jeb