Golang Go语言中 regex 匹配所有符合字符串

发布于 1周前 作者 sinazl 来自 Go语言

Golang Go语言中 regex 匹配所有符合字符串

我有下面这段字符串

text := 59-1124043-1053 - FLOATING JOINT4PC15-Feb-2020 Purchase PriceUSD 28.00112.00per 1 PCTaxable: N Resale: N<70.000KG DHL Express - Intl Shpts 962183650SCAC1:DHLCOver70.000KG Agility Logistics - Export StandardSCAC2:AGYC3 59-1124043-1055 - UNDER RAIL1PC15-Feb-2020 Purchase PriceUSD 138.00138.00per 1 PCTaxable: N Resale: N<70.000KG DHL Express - Intl Shpts 962183650SCAC1:DHLCOver70.000KG Agility Logistics - Export StandardSCAC2:AGYC4 59-1124043-1056 - UPPER RAIL1PC15-Feb-2020

通过正则规则

PNExprV2 = [^(-138)][\d]+-.*[\d][\s]+.*[\d]{1}[a-zA-Z]{2}[\d]{2}-[a-zA-Z]{3}-[\d]{4}

PNParser := regexp.MustCompile(PNExprV2)

line1 := PNParser.FindAllStringSubmatch(c, 10)

匹配出来的还是原字符串 期待匹配结果是 ["59-1124043-1053 - FLOATING JOINT4PC15-Feb-2020", ..., "59-1124043-1056 - UPPER RAIL1PC15-Feb-2020"]

请大佬们帮忙看看


更多关于Golang Go语言中 regex 匹配所有符合字符串的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

8 回复

.*就已经匹配完了后面的所有字符串。
[^(-138)][\d]±[\d]±[\d]+\s-\s[a-zA-Z]+\s[a-zA-Z0-9]±[a-zA-Z]±[\d]+
这个能匹配出来,但是我也是个菜鸟,还是等大佬的吧。

更多关于Golang Go语言中 regex 匹配所有符合字符串的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


有什么特殊要求么?
[^(-138)] 看起来你想不以 -, 1, 3, 8 开头? 那么不需要括号, 直接 [^-138] 就好. 除非你是想不以整个 -138 开头.
其他方便好像没看出什么来.
简单的话就 “\d±\d±\d+ - \w+ \w±\w{3}-\d{4}”

PS: 不要滥用 .*

测试可以用这个网站: https://regex101.com/


感谢两位,这段文本可以匹配了,我在试试看其他文本。谢谢

大佬能帮忙看看新的么

“\d±\d±\w+( - \w+)? \w±\w{3}-\d{4}”

“611-0571271-20126 8PC03-Feb-2020” 这个字符串中间没有之前 “59-1124043-1053 - FLOATING JOINT4PC15-Feb-2020” 中的 " - FLOATING" 改成可选的就行.
然后 “811-0571378-5147B 7PC03-Feb-2020” 中的 “5147B” 出现了字母, 用字符匹配.

推荐一下 <regular expression> 这本书. 简单的话 <正则表达式必知必会> 就几十页, 上班通勤就完全搞定. 基本上大多简单的问题都能解决.

感谢
我这个比较复杂并且不是很通用

如下字符
···
611-0571271-20126 8PC03-Feb-2020DEBURR INSERTMaterial revision level: A Purchase PriceUSD 14.00112.00per 1 PCTaxable: N Resale: NRFQ# 170593<70.000KG DHL Express - Intl Shpts 962183650SCAC1:DHLCOver70.000KG Agility Logistics - Export StandardSCAC2:AGYC711-0571337-21531 5PC03-Feb-2020U-ING PUNCHMaterial revision level: B Purchase PriceUSD 41.00205.00per 1 PCTaxable: N Resale: NRFQ# 170593<70.000KG DHL Express - Intl Shpts 962183650SCAC1:DHLCOver70.000KG Agility Logistics - Export StandardSCAC2:AGYC811-0571378-5147B 7PC03-Feb-2020

59-1124043-1053 - FLOATING JOINT4PC15-Feb-2020 Purchase PriceUSD 28.00112.00per 1 PCTaxable: N Resale: N<70.000KG DHL Express - Intl Shpts 962183650SCAC1:DHLCOver70.000KG Agility Logistics - Export StandardSCAC2:AGYC3 59-1124043-1055 - UNDER RAIL1PC15-Feb-2020 Purchase PriceUSD 138.00138.00per 1 PCTaxable: N Resale: N<70.000KG DHL Express - Intl Shpts 962183650SCAC1:DHLCOver70.000KG Agility Logistics - Export StandardSCAC2:AGYC4 59-1124043-1056 - UPPER RAIL1PC15-Feb-2020

219-1895504 Die Sleeve, Floating Die Case6PC31-Jan-2020 Purchase PriceUSD 117.00702.00per 1 PCTaxable

119-1895433-00008 Punch Cap6PC31-Jan-2020 Purchase PriceUSD 95.0

are met for this material / product. This specification is available under Documents in the TE SupplierPortal at https://supplierportal.te.comGD40 - EACH LOT MUST INCLUDE AN INSPECTION REPORT, WITH 100% INSPECTION OF 10% OF THE PIECES, WITH A MINIMUM OF ONE PIECE INSPECTED AND A MAXIMUM OF 3 PIECES INSPECTED FOR EACH LOT.GD50 - EACH PIECE OF TOOLING TO BE CONSTRUCTED PER TE DRAWING AND SCRIBED IN A NON-FUNCTIONAL AREA WITH THE DETAIL NUMBER, REVISION LEVEL AND SUPPLIER NUMBER. SEE PURCHASE ORDER FOR SUPPLIER NUMBER. IF SIZE IS RESTRICTED, BAG AND TAG EACH PIECE WITH THE SAME INFORMATION.GE26 - THE VALUE OF THIS PO IS NOT CONSIDERED AN “ASSIST” BY U.S.CUSTOMS.119-1895433-00008 Punch Cap6PC31-Jan-2020 219-1895504 Die Sleeve, Floating Die Case6PC31-Jan-2020
···

我最后用了
(\d±\d±[\d]+|\d±\d+)(.*?)\d{1,2}\w{2}\d{2}-\w{3}-\d{4}

在Go语言中,使用正则表达式(regex)匹配所有符合特定模式的字符串通常涉及使用标准库中的regexp包。以下是一个基本的示例,展示了如何匹配所有符合某个模式的字符串:

  1. 导入regexp

    import (
        "fmt"
        "regexp"
    )
    
  2. 编写正则表达式: 假设我们要匹配所有包含数字的字符串,正则表达式可以是\d+(表示一个或多个数字)。

  3. 编译正则表达式并匹配

    func main() {
        // 示例字符串切片
        texts := []string{"abc123", "def456", "ghi", "789jkl"}
    
        // 编译正则表达式
        re := regexp.MustCompile(`\d+`)
    
        // 遍历字符串切片并查找匹配项
        for _, text := range texts {
            if match := re.FindString(text); match != "" {
                fmt.Println("Matched:", match, "in", text)
            } else {
                fmt.Println("No match in", text)
            }
        }
    }
    
  4. 运行程序: 上述代码将输出所有包含数字的字符串及其匹配部分。

请注意,FindString方法返回字符串中的第一个匹配项。如果需要查找所有匹配项,可以使用FindAllString方法。此外,确保正则表达式正确无误,并根据实际需求调整模式。在处理复杂模式时,可以利用正则表达式在线测试工具进行调试。

回到顶部