Microsoft Excel中的正则expression式子stringreplace
我想用国际版“447”批量replacestring列表中的“07”部分(手机号码)。
当前string列表在Excel电子表格中形成一个列。
我有正则expression式来匹配需要修改的string:
^07[0-9]{9}$
…但我不知道如何做replace,我需要。
数据在Excel电子表格中,但当然可以导出。
首选的解决scheme是将数据保存在Microsoft Excel中,但是它当然可以导出然后重新导入。 我知道TextMate具有正则expression式replacefunction。 这可以帮助我吗?
我正要去寻找优雅的VBA解决scheme或其他什么,然后我想:“请继续。 我们只是想操纵我们自己的电子表格中的一些数据。 为什么复杂的事情?
这个想法对你来说如何?
-
在现有数据列的后面插入一个新列(让我们假设是列C)
-
用下面的公式填写新栏:
="447" & RIGHT(C1, 9)
-
select列D(现在包含新值)和粘贴值(粘贴特殊对话框中)到列C上,replace现有值
-
删除“工作”栏D
这不是编程,但是如果你不需要程序就只需要这样做,对吧?
使用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
并在立即窗口中调用这个子。 以上是丢弃代码,不是为了可重用性而devise的。 我知道,所以不要告诉我。 😉
虽然你可能会逃脱一个单元格的function:
=IF(AND(LEN(A1) = 11;LEFT(A1; 2) = "07"); "44" & RIGHT(A1; 10); A1)
您必须在工作表中包含Microsoft正则expression式(将其添加为参考)
然后制作一个快速macros,如下所示:
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
然后,在表单中简单地将其称为macros(例如):
=INDEX(B6:B15, RegMatch($A$6:$A$15, $A$3))
第一个参数是你的范围,第二个参数是你的模式(如上)