首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Microsoft Excel中的正则表达式子字符串替换

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

Stack Overflow用户
提问于 2009-06-16 07:25:03
回答 3查看 52.2K关注 0票数 7

我想将字符串列表(移动电话号码)中的"07“部分批量替换为国际版本的"447”。

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

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

代码语言:javascript
运行
复制
^07[0-9]{9}$

...but我不知道如何做我需要的替换。

数据在Excel电子表格中,但当然也可以导出。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-16 07:36:19

我正要去寻找优雅的VBA解决方案,然后我想:‘等等,我们只是想操纵我们拥有的电子表格中的一些数据,为什么要把事情复杂化呢?’

你觉得这个想法听起来怎么样:

在包含现有数据的列后面插入新列(假设是C列)并使用以下公式填充新列:="447" & RIGHT(C1, 9)

  • select D(现在包含新值)并将值(位于选择性粘贴对话框中)粘贴到C列,替换现有值

'working‘列D

这不是编程,但如果你只需要做一次,你就不需要程序了,对吧?

票数 17
EN

Stack Overflow用户

发布于 2009-06-16 07:35:14

使用Excel VBA。请参考“微软VBScript正则表达式5.5”。

然后,在新的常规VBA模块中执行以下操作:

代码语言:javascript
运行
复制
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

并在“即时”窗口中调用此sub。上面的代码是一次性代码,并没有考虑到可重用性。我知道,所以别告诉我。;-)

尽管您可能可以使用cell函数:

代码语言:javascript
运行
复制
=IF(AND(LEN(A1) = 11;LEFT(A1; 2) = "07"); "44" & RIGHT(A1; 10); A1)
票数 11
EN

Stack Overflow用户

发布于 2009-06-16 07:31:39

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

然后创建一个快速宏,如下所示,以使用它:

代码语言:javascript
运行
复制
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

然后,只需在工作表中将其作为宏调用(例如):

代码语言:javascript
运行
复制
=INDEX(B6:B15, RegMatch($A$6:$A$15, $A$3))

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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/999983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档