AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 77555049
Accepted
hope
hope
Asked: 2023-11-27 15:08:29 +0800 CST2023-11-27 15:08:29 +0800 CST 2023-11-27 15:08:29 +0800 CST

将三个函数合并为一个函数,以删除特定字符和数字周围的所有可能的空格

  • 772

注意:在我发布问题之前,
我收到一个建议,该链接可以回答我的问题,我已经检查过它,但它没有。

因为我们的数据库系统上有多个用户输入值(稍后导出到 Excel 电子表格中)。
因此,用户每次手动输入的乘法模式都会不同。
示例 1: “3 x2”
示例 2: “4x 8”
示例 3: “6 x 10”
您会注意到,“X”字符和每次不同位置的数字之间可能有一个空格。
因为我对正则表达式的专业知识还处于初级阶段,所以
我创建了三个函数来处理上面的每个示例,并且它们分别正常工作。
但是,我寻求将这些功能合并为一个功能(如果可能的话)以便于使用。
预先,非常感谢您的帮助。

当前值 预期结果
最后进行 3 x2 注射 最后 3x2 注射
最后 4x 8 注射 最后 4x8 注射
最后 6 x 10 次注射 最后 6x10 注射
Function Remove_Space_between_Digit_X(ByVal str As String) As String
   Static reg As New RegExp
     reg.Global = True
      reg.IgnoreCase = True
      
       reg.Pattern = "(\s[0-9]+)(\s)(x)"
       
    Remove_Space_between_Digit_X = re.Replace(str, "$1$3")
End Function

Function Remove_Space_between_X_Digit(ByVal str As String) As String
   Static reg As New RegExp
     reg.Global = True
      reg.IgnoreCase = True
      
       reg.Pattern = "(x)(\s)([0-9]+)(\s)"
       
    Remove_Space_between_X_Digit = reg.Replace(str, "$1$3$4")
End Function

Function Remove_Space_around_X_Digit(ByVal str As String) As String
   Static reg As New RegExp
     reg.Global = True
      reg.IgnoreCase = True
      
       reg.Pattern = "([0-9])+(\s)(x)(\s)([0-9]+)(\s)"
       
    Remove_Space_around_X_Digit = reg.Replace(str, "$1$3$5$6")
End Function
regex
  • 3 3 个回答
  • 52 Views

3 个回答

  • Voted
  1. Best Answer
    Nick
    2023-11-27T15:36:30+08:002023-11-27T15:36:30+08:00

    您可以使用这个正则表达式:

    (\d)\s*x\s*(\d)
    

    这将匹配:

    • (\d):一个数字(在第 1 组中捕获)
    • \s*x\s*:x被一些空格包围
    • (\d):一个数字(在第 2 组中捕获)

    并将其替换为$1x$2以删除字符串中的所有空格。

    regex101演示

    在VBA中:

    Function Remove_Space_around_X(ByVal str As String) As String
        Static reg As New RegExp
        reg.Global = True
        reg.IgnoreCase = True 
        reg.Pattern = "(\d)\s*x\s*(\d)"
           
        Remove_Space_around_X = reg.Replace(str, "$1x$2")
    End Function
    

    笔记

    为了简单起见,正则表达式并没有尽可能严格;它也会匹配类似的东西a4 x 3b。如果这可能是一个问题,请改为使用:

    \b(\d+)\s*x\s*(\d+)\b
    

    它使用分词并匹配多个数字以确保它只匹配数字的乘法。

    regex101上的正则表达式演示

    • 1
  2. taller
    2023-11-27T15:38:29+08:002023-11-27T15:38:29+08:00
    • 根据您的示例数据,可以使用 UDF 来完成
    • 支持其他运营商,例如。4 * 5或者2 + 4。在第二个选项中,您需要aKey根据需要进行修改。
    Function Remove_Space(ByVal sStr As String) As String
        Static reg As New RegExp
        Dim objmatch As Object
        reg.Global = True
        reg.IgnoreCase = True
        reg.Pattern = "\d+\D+\d+"
        Set objmatch = reg.Execute(sStr)
        If objmatch.Count > 0 Then
            sStr = Replace(sStr, objmatch(0), Replace(objmatch(0), " ", ""))
        End If
        Remove_Space = sStr
    End Function
    
    • 如果x是两个数字之间的唯一运算符,则无需 RegExp 即可完成。
    Function RemoveSpace(ByVal sTxt As String) As String
        Dim aKey, i As Long
        aKey = Array(" x ", " x", "x ")
        For i = 0 To UBound(aKey)
            sTxt = Replace(sTxt, aKey(i), "x", , , vbTextCompare)
        Next
        RemoveSpace = sTxt
    End Function
    
    • 0
  3. klode
    2023-11-27T17:12:23+08:002023-11-27T17:12:23+08:00

    如果我理解正确的话,你想要取:
    任何两个数字,只有一个“x”,并且“x”周围有零个或多个空格

    ...并将其转换为:
    原始的两个数字,它们之间有一个明确的“x”。

    此正则表达式匹配您提供的所有情况,以及类似“7x23”(根本没有空格)的内容。

    ([0-9]+) *x *([0-9]+)
    

    意义:

    • “([0-9]+)”是第一个数字(从 0 到 9 的数字序列)
    • “*”表示零个或多个文字空格
    • “x”表示字面值 x
    • “*”表示零个或多个文字空间
    • “([0-9]+)”是第二个数字(从0到9的数字序列)

    替换正则表达式模式很简单:

    \1 x \2
    

    意义:

    • “\1”第一个正则表达式分组(aa 正则表达式用括号括起来)
    • “ x ” 文字 <SPACE>-x-<SPACE>
    • “\2”第二个正则表达式分组(用括号包围的正则表达式)

    根据您的示例代码,我认为您的替换字符串将是:

    "$1 x $2"
    

    ——克洛德

    • 0

相关问题

  • 正则表达式:匹配直到“,”,但如果“,”在括号内则不匹配

  • 从字符串中找到第 n 个数字并使用 dart 分割 ['8','th']

  • 正则表达式后 3 个字符后换行

  • Google Sheets 正则表达式中的正向前瞻

  • 如何在 macOS 终端中使用 Perl 的重命名功能将随机文件名替换为自定义字符串和索引?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve