Golang正则表达式:不适用于下划线

stszievb  于 2023-08-01  发布在  Go
关注(0)|答案(2)|浏览(131)

我创建了下面的代码来使用正则表达式获取日期,但它没有得到它:

package main
import (
    "fmt"
    "regexp"
)
func main() {
    strings := []string{
        "mid_monthly_2023_10_mac",
        "mid_monthly_2023_11_mac",
        "mid_monthly-20-04-end",
        "mid_monthly-19-6-end",
    }
    pattern := `\b(?:\d{4}[-_]\d{1,2}[-_]\d{1,2}|\d{2}[-_]\d{1,2}[-_]\d{4})\b`
    for _, str := range strings {
        re := regexp.MustCompile(pattern)
        matches := re.FindAllString(str, -1)
        fmt.Println(matches)
    }
}

字符串
matches不返回任何东西,任何建议。

iaqfqrcu

iaqfqrcu1#

在RegEx中,单词边界(\b)包括数字和下划线作为单词的一部分。你的例子经常包含下划线作为建议的边界,所以你需要寻找它而不是\b快捷方式。
您的RegEx是为3部分日期编写的,但您的示例字符串只有两部分。如果您希望所有四个字符串都匹配,则需要将第三部分设置为可选,或者将其完全从测试中删除。(您的请求中没有具体说明)
您的后两个示例没有4位数字,但目前您的两个RegEx测试都期望至少有一个4位数字。(您的请求中没有具体说明)
如果你要找的是两个部分,其中一个总是四位数:(只有前两个匹配)
[-_](\d{4}[-_]\d{1,2}|\d{1,2}[-_]\d{4})[_-]
如果你要找两个部分,其中一个可以是四位数:(四个都匹配)
[-_](\d{4}[-_]\d{1,2}|\d{1,2}[-_]\d{4}|\d{1,2}[-_]\d{1,2})[_-]

u3r8eeie

u3r8eeie2#

代码中的正则表达式模式似乎是问题所在。它与您在字符串中提供的日期格式不匹配。我修改了正则表达式模式,它应该与字符串中的日期匹配:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    strings := []string{
        "mid_monthly_2023_10_mac",
        "mid_monthly_2023_11_mac",
        "mid_monthly-20-04-end",
        "mid_monthly-19-6-end",
    }
    pattern := `\b\d{4}[-_]\d{1,2}[-_]\d{1,2}\b|\b\d{2}[-_]\d{1,2}[-_]\d{2}\b`
    for _, str := range strings {
        re := regexp.MustCompile(pattern)
        matches := re.FindAllString(str, -1)
        fmt.Println(matches)
    }
}

字符串
修改后的模式\b\d{4}[-_]\d{1,2}[-_]\d{1,2}\b|\b\d{2}[-_]\d{1,2}[-_]\d{2}\b应匹配格式为“YYYY-MM-DD”或“YY-MM-DD”的日期,并以连字符或下划线分隔
请尝试
用于下划线

pattern := `\b\d{4}_\d{1,2}_\d{1,2}\b|\b\d{2}_\d{1,2}_\d{2}\b`


此模式匹配格式为“YYYY_MM_DD”或“YY_MM_DD”的日期,并以下划线(_)分隔

相关问题