正则表达式可匹配包含两个(或多个)单词的字符串,且顺序不区分大小写

时间:2018-11-26 21:39:03

标签: regex string go

希望你们能帮助我。

我需要创建一个字符串,在满足以下条件时提醒我:

  1. 在消息中识别出两个(或更多)单词
  2. 它不仅要查看“整个”单词,而且还要查看包含我要搜索的文本的单词。为方便起见,我搜索“错误”,当它发现“错误 s ”或“无错误”时也要提醒我。
  3. 不应该区分大小写
  4. 它必须查看单词1和word2,但反之亦然,换句话说,它必须查看它们而不考虑它们的顺序

我在regex101上玩了一段时间,但我无法达到所有条件(条件4仍然缺失)。

您可以在以下链接中找到我所能做的: https://regex101.com/r/Z4cE9A/5

请注意,我需要具有以下表达式特征的匹配项:

香料:golang /标志:单行

重要提示:我不能使用字符“ |”因为在我要使用此字符串的系统上它无法正常工作。

任何帮助将不胜感激。预先感谢您的支持。

编辑:我很困惑。无效字符为“ |”。但是,如果可能的话,最好也避免使用“ /”,因为我不确定它是否有效。如果您愿意,我们可以给我提供两个字符串,一个不带符号“ /”,一个不带符号,以防不起作用。

1 个答案:

答案 0 :(得分:0)

这应该做您想要的:

(?i:(http)|(error))

您可以将httperror替换为要搜索的任何其他关键字。

要在Golang中做到这一点:

package main

import (
    "fmt"
    "regexp"
    "strings"
)

func main() {
    keywords := []string{
        "error",
        "http",
    }
    p := "(?i:(" + strings.Join(keywords, ")|(") + "))"
    text := `
    Gran Turismo Sport

Shipment Error

Attempt
https://
`
    re := regexp.MustCompile(p)
    fmt.Println(re.MatchString(text))
}

您可以在Golang游乐场进行测试:

https://play.golang.org/p/XOhNVBCh8Pt

编辑:

基于无法使用|字符的新限制,我建议您使用以下字符进行搜索:

(?i:(error)?(http)?)

这将始终返回true(或在find all中找到空字符串的列表),但是好事情是您可以过滤掉所有空字符串,最后得到想要的结果。

这是在Golang Playground中工作的一个示例:

https://play.golang.org/p/miVC0hdLtQc

编辑2: 如果要确保所有关键字都在文本中,请用?更改正则表达式中的{1,}。另外,您不再需要循环。

(?i:(error){1,}(http){1,})

这是在Golang Playground中工作的示例

https://play.golang.org/p/f9eFcvObDsA