Go语言 用另一个字符串替换部分字符串的有效方法

ha5z0ras  于 2023-11-14  发布在  Go
关注(0)|答案(2)|浏览(133)

任务是从这个示例值(23,07 USD)中删除前导反斜杠“\”,所以最后我得到(23,07 USD)。这个(23\,07 USD)是一个更长的字符串的一部分,其中23,07是值,USD是示例货币。这个更长的字符串可以是类似于fjsdkjfd$$klsgf|fj15%fdsjkl|gdag-63431|(34\,21 USD)|czjfkljsdklfjk的东西。有更有效的方法吗?

  1. package main
  2. import (
  3. "fmt"
  4. "regexp"
  5. "strings"
  6. )
  7. var (
  8. s = `fjsdkjfd$$klsgf|fj15%fdsjkl|gdag-63431|(34\,21 USD)|czjfkljsdklfjk`
  9. )
  10. func main() {
  11. re := regexp.MustCompile(`\(\d+\\,{0,1}\d{1,2}\ {0,1}\w{2,3}\)`)
  12. s1 := re.Find([]byte(s))
  13. s2 := strings.Replace(string(s1), `\,`, `,`, 1)
  14. s3 := strings.Replace(s, string(s1), s2, 1)
  15. fmt.Println(s3)
  16. }

字符集

uyto3xhc

uyto3xhc1#

示例代码:

  1. func removeLeadingBackslash(s string) string {
  2. re := regexp.MustCompile(`\(\d+\\,\d+ \w+\)`)
  3. return re.ReplaceAllStringFunc(s, func(matched string) string {
  4. return strings.Replace(matched, `\,`, `,`, 1)
  5. })
  6. }

字符集

更多测试:

  1. func main() {
  2. testCases := []string{
  3. "fjsdkjfd$$klsgf|fj15%fdsjkl|gdag-63431|(34\\,21 USD)|czjfkljsdklfjk",
  4. "This is a test string: (12\\,34 EUR).",
  5. "Another example: (9\\,99 USD) a sentence.",
  6. "No leading backslash in this one: (56,78 USD).",
  7. "Test string with (1\\,23 USD) in the middle.",
  8. }
  9. for _, s := range testCases {
  10. result := removeLeadingBackslash(s)
  11. fmt.Println(result)
  12. }
  13. }

输出:

  1. fjsdkjfd$$klsgf|fj15%fdsjkl|gdag-63431|(34,21 USD)|czjfkljsdklfjk
  2. This is a test string: (12,34 EUR).
  3. Another example: (9,99 USD) a sentence.
  4. No leading backslash in this one: (56,78 USD).
  5. Test string with (1,23 USD) in the middle.

展开查看全部
zfciruhq

zfciruhq2#

使用 capture pattern,并将 match 替换为($1,$2)

  1. \((\d+)\\,?(\d{1,2} ?\w{2,3})\)

字符集

相关问题