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)) 

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