我想用国际版“447”批量替换字符串列表(手机号码)的“07”部分。
字符串列表当前在Excel电子表格中形成一个列。
我有正则表达式来匹配需要修改的字符串:
^07[0-9]{9}$
...但我不知道如何进行我需要的替换。
数据位于Excel电子表格中,但当然可以导出。
首选解决方案是将数据保存在Microsoft Excel中,但它当然可以导出然后重新导入。我知道TextMate有一个正则表达式替换功能。这可以帮助我吗?
答案 0 :(得分:17)
我正准备寻找优雅的VBA解决方案或其他什么,然后我想:'坚持下去。我们只想操纵我们拥有的电子表格中的一些数据。为什么复杂化?'
这个想法听起来如何:
在包含现有数据的列之后插入一个新列(假设它是C列)
使用以下公式填充新列:="447" & RIGHT(C1, 9)
选择列D(现在包含新值)和粘贴值(位于“选择性粘贴”对话框中)到列C上,替换现有值
删除“工作”栏D
这不是编程,但是如果你不需要一个程序就必须这样做,对吗?
答案 1 :(得分: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
并在立即窗口中调用此子。以上是丢失的代码,没有考虑到可重用性。我知道,所以不要告诉我。 ; - )
虽然你可以逃脱细胞功能:
=IF(AND(LEN(A1) = 11;LEFT(A1; 2) = "07"); "44" & RIGHT(A1; 10); A1)
答案 2 :(得分: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
然后,只需将其称为工作表中的宏(例如):
=INDEX(B6:B15, RegMatch($A$6:$A$15, $A$3))
第一个参数是你的范围,第二个参数是你的模式(如上所述)