gpt4 book ai didi

regex - 使用 VBA 正则表达式在逗号后添加空格

转载 作者:行者123 更新时间:2023-12-02 10:10:22 24 4
gpt4 key购买 nike

我正在尝试使用正则表达式来查找范围内包含逗号但逗号后没有空格的单元格。然后,我想简单地在逗号和下一个字符之间添加一个空格。例如,单元格内有 Wayne,Bruce 文本,但我想将其转换为 Wayne, Bruce

我有一个正则表达式模式,可以找到包含字符和逗号而没有空格的单元格,但是当我替换它时,它会截断一些字符。

Private Sub simpleRegexSearch()
' adapted from http://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex-in-microsoft-excel-both-in-cell-and-loops
Dim strPattern As String: strPattern = "[a-zA-Z]\,[a-zA-Z]"
Dim strReplace As String: strReplace = ", "
Dim regEx As New RegExp
Dim strInput As String
Dim Myrange As Range

Set Myrange = ActiveSheet.Range("P1:P5")

For Each cell In Myrange
If strPattern <> "" Then
strInput = cell.Value

With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With

If regEx.TEST(strInput) Then
Debug.Print (regEx.Replace(strInput, strReplace))
Else
Debug.Print ("No Regex Not matched in " & cell.address)
End If
End If
Next

Set regEx = Nothing
End Sub

如果我对“Wayne,Bruce”运行它,我会得到“Wayn, ruce”。如何保留这些字母,但将它们分开?

最佳答案

按以下方式更改代码:

Dim strPattern As String: strPattern = "([a-zA-Z]),(?=[a-zA-Z])"
Dim strReplace As String: strReplace = "$1, "

输出将为Bruce, Wayne

问题是您无法在 VBScript 中使用后视功能,因此我们需要一种解决方法,即捕获逗号之前的字母组。

对于逗号后面的字母,我们可以使用前瞻,它在正则表达式中可用。

因此,我们只需使用 ([a-zA-Z]) 捕获并在替换调用中使用反向引用 $1 恢复它。前瞻不消耗字符,所以我们已经被覆盖了。

(编辑)正则表达式说明

  • ([a-zA-Z]) - 包含仅与 1 个英文字符匹配的字符类的捕获组
  • , - 匹配文字 , (实际上不必转义它,因为它不是特殊字符)
  • (?=[a-zA-Z]) - 积极的前瞻,仅检查(不匹配或消耗)逗号后面的直接字符是否是 和英文字母。

关于regex - 使用 VBA 正则表达式在逗号后添加空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30712701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com