gpt4 book ai didi

javascript - Go 语言中的正则表达式 "before text matching"

转载 作者:IT王子 更新时间:2023-10-29 01:41:24 26 4
gpt4 key购买 nike

我有一段 JavaScript 代码,我正试图用 GoLang 替换它。逻辑要求我将以下字符串拆分为“;”仅当后跟“I”或“D”时:

I.E.viewability:-2;D.ua:Mozilla/5.0 (Linux; Android 7.0; SM-G920W8 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36;D.G.city:Burnaby;D.G.zip:V5C;D.G.region:BC;D.G.E.country_code2:CA;

在 JavaScript 中,我使用:

/;(?=[ID]|$)/

我的理解是 GoLang 使用这个正则表达式库

https://github.com/google/re2/wiki/Syntax

这清楚地表明不支持上述语法(调用 before text matching re)。

在 Go 语言中实现相同结果的正确方法是什么?

最佳答案

您可以“反转”正则表达式以匹配您需要的字符串。您想要匹配除 ; 后跟 ; 之外的任何 1+ 个字符,但不跟 ID .

使用

[^;]+(?:;[^ID;][^;]*)*

参见 regex demo

详细信息:

  • [^;]+ - 除了 ;
  • 之外的 1 个或多个字符
  • (?:;[^ID;][^;]*)* - 零个或多个序列:
    • ; - 一个;
    • [^ID;] - ID; 以外的字符(即在为了不匹配空值)
    • [^;]* - ; 以外的零个或多个字符

查看 Go demo .

package main

import (
"regexp"
"fmt"
)

func main() {
var re = regexp.MustCompile(`[^;]+(?:;[^ID;][^;]*)*`)
var str = `I.E.viewability:-2;D.ua:Mozilla/5.0 (Linux; Android 7.0; SM-G920W8 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36;D.G.city:Burnaby;D.G.zip:V5C;D.G.region:BC;D.G.E.country_code2:CA;`

for _, match := range re.FindAllString(str, -1) {
fmt.Println(match)
}
}

输出:

I.E.viewability:-2
D.ua:Mozilla/5.0 (Linux; Android 7.0; SM-G920W8 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36
D.G.city:Burnaby
D.G.zip:V5C
D.G.region:BC
D.G.E.country_code2:CA

关于javascript - Go 语言中的正则表达式 "before text matching",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45059243/

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