Golang使用正则表达式拆分字符串

huangapple go评论95阅读模式
英文:

Golang Split String with Regexp

问题

我有一个字符串,我使用regexp包来分割字符串。然而,我无法创建所需的正则表达式。

正则表达式代码如下:

v := "@636e0e0eac0bd25cd5df92a3$636e0e49ac0bd25cd5df92a5.result.result[0].code.xTrim()"
r, _ := regexp.Compile(`(@[a-zA-Z0-9]+$[a-zA-Z0-9]+)(.*)`)
variableParts := r.FindStringSubmatch(v)

VariablesParts数组:

0: "@636e0e0eac0bd25cd5df92a3$636e0e49ac0bd25cd5df92a5.result.result[0].code.xTrim()"

1: "@636e0e0eac0bd25cd5df92a3$636e0e49ac0bd25cd5df92a5"

2: ".result.result[0].code.xTrim()"

这是我期望的结果:

数组长度可以改变,但数组应包含以下4个字符串。

0: "@636e0e0eac0bd25cd5df92a3$636e0e49ac0bd25cd5df92a5.result.result[0].code.xTrim()"

1: "@636e0e0eac0bd25cd5df92a3$636e0e49ac0bd25cd5df92a5"

2: ".result.result[0].code.xTrim()"

3: ".xTrim()"

如何获得这个结果?我需要哪个正则表达式字符串?


更新为新的期望结果:

1: "@636e0e0eac0bd25cd5df92a3$636e0e49ac0bd25cd5df92a5"

2: ".result.result[0].code.xTrim()"

3: ".result"

4: ".result[0]"

5: ".code"

6: ".xTrim()"

英文:

I have a string and I split the string with regexp package. However I could not create a regexp I need.

The regexp code lines:

v = "@636e0e0eac0bd25cd5df92a3$636e0e49ac0bd25cd5df92a5.result.result[0].code.xTrim()"
r, _ := regexp.Compile(`(@[a-zA-Z0-9]+$[a-zA-Z0-9]+)(.*)`)
variableParts := r.FindStringSubmatch(v)

VariablesParts array:

0: "@636e0e0eac0bd25cd5df92a3$636e0e49ac0bd25cd5df92a5.result.result[0].code.xTrim()"

1: "@636e0e0eac0bd25cd5df92a3$636e0e49ac0bd25cd5df92a5"

2: ".result.result[0].code.xTrim()"

This is my desired result:

Array length can change but array should include this 4 strings.

0: "@636e0e0eac0bd25cd5df92a3$636e0e49ac0bd25cd5df92a5.result.result[0].code.xTrim()"

1: "@636e0e0eac0bd25cd5df92a3$636e0e49ac0bd25cd5df92a5"

2: ".result.result[0].code.xTrim()"

3: ".xTrim()"

How Can I get this result. Which regexp string I need?


UPDATE for new desired result:

1: "@636e0e0eac0bd25cd5df92a3$636e0e49ac0bd25cd5df92a5"

2: ".result.result[0].code.xTrim()"

3: ".result"

4: ".result[0]"

5: ".code"

6: ".xTrim()"

答案1

得分: 1

你可以将最后的(.*)部分替换为(.*(\.[^.]*))$并使用以下正则表达式:

(@[a-zA-Z0-9]+$[a-zA-Z0-9]+)(.*(\.[^.]*))$

详细说明如下:

  • (@[a-zA-Z0-9]+\$[a-zA-Z0-9]+) - 第一组:一个@字符,然后是一个或多个字母数字字符,然后是一个#字符,再然后是一个或多个字母数字字符。
  • (.*(\.[^.]*)) - 第二组:任意数量的非换行字符(尽可能多),然后是第三组:一个.字符,然后是零个或多个非.字符。
  • $ - 字符串末尾。如果右侧可能还有更多文本,请删除此部分。

你可以在正则表达式演示中查看示例。

英文:

You can replace the last (.*) part with (.*(\.[^.]*))$ and use

(@[a-zA-Z0-9]+$[a-zA-Z0-9]+)(.*(\.[^.]*))$

See the regex demo. Details:

  • (@[a-zA-Z0-9]+\$[a-zA-Z0-9]+) - Group 1: a @ char, then one or more alphanumeric chars, then a # char and then again one or more alphanumeric chars
  • (.*(\.[^.]*)) - Group 2: any zero or more chars other than line break chars as many as possible, and then Group 3: a ., zero or more chars other than a . char
  • $ - at the end of string. Remove if there can be more text on the right.

huangapple
  • 本文由 发表于 2022年11月15日 18:49:32
  • 转载请务必保留本文链接:https://go.coder-hub.com/74444340.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定