gpt4 book ai didi

.net - 将字符串替换为目标格式

转载 作者:行者123 更新时间:2023-12-04 23:05:47 24 4
gpt4 key购买 nike

有没有办法使用正则表达式或字符串替换来替换字符串

COND X > 49 300000 200000

预期格式为

COND(X > 49,300000,200000)

我当前的方法是执行 string.Split("") 并将其转换为列表并在正确的索引处插入大括号。但我的方法的问题是字符串不是独立的,而是包含在更大的表达式中,并且有时会与 whitespace 进行比较,如 COND ABC = 中。条件的右侧是空格。

最佳答案

这是不可能一次性实现的。我建议:

  1. 添加括号:(\p{Lu}+)\s*(\p{Lu}+)(.*) (替换为 $1($2$3) )

参见demo

  • 然后,您可以使用正则表达式查找数字之间的所有空格并将其替换为逗号:(?<=\d+)\s+(?=\d+) .
  • 参见demo (请参阅“上下文”选项卡)。

    这是一个有效的 VB.NET 代码:

    Dim strIn As String = "COND X > 49 300000 200000"
    Dim rx2 = New Regex("(\p{Lu}+)\s*(\p{Lu}+)(.*)")
    Dim result2 As String = rx2.Replace(strIn, "$1($2$3)")
    result2 = Regex.Replace(result2, "(?<=\d+)\s+(?=\d+)", ",")

    输出:

    enter image description here

    编辑:1-REGEX PASS:

    如果您使用 MatchEvaluator里面的功能Regex.Replace ,我们可以确保只运行正则表达式一次。

    Dim str3 = "COND X > 49 300000 200000 778888"
    Dim rx3 = New Regex("(\p{Lu}+)\s*(\p{Lu}+.*?)(?:\s+(\d+))+")
    Dim result2 = rx3.Replace(str3, New MatchEvaluator(Function(m As Match)
    If m.Groups(3).Captures.Count > 0 Then
    Return String.Format("{0}({1} {2})",
    m.Groups(1).Value,
    m.Groups(2).Value,
    String.Join(",",
    m.Groups(3).Captures.Cast(Of Capture)().Select(Function(n) n.Value).ToArray()
    )
    )
    Else
    Return m.Value
    End If
    End Function))

    结果:

    enter image description here

    关于.net - 将字符串替换为目标格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30617805/

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