gpt4 book ai didi

regex - 无法在正则表达式中捕获单引号

转载 作者:数据小太阳 更新时间:2023-10-29 03:29:52 26 4
gpt4 key购买 nike

我正在尝试捕捉看起来像这样的线条,例如:

2016/07/27 21:37:50 [DEV][INFO] Executing Process 'Some process'

我正在使用以下正则表达式模式:

\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2} \[.*\]\[.*\] Executing Process '.*'

但是,该行未被捕获。我注意到它一直适用于单引号。但是,如果我添加单引号,它就会失败。我认为可能有两种不同类型的单引号,但我复制并粘贴了正在使用的引号,但它仍然没有用。此外,两个引号均由同一代码生成,因此一个单引号应与另一个相同。

编辑:
这是正则表达式代码。

regexPattern := `\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2} \[.*\]\[.*\] Executing Process '.*'`

log = highlight(log, regexPattern)
...
func highlight(log, pattern string) string {
regex := regexp.MustCompile(
matches := regex.FindAllString(log, -1)

编辑:
我想到了。我取回的日志是 HTML 转义的,所以单引号实际上是 '。这阻止了与单引号的匹配

最佳答案

试试这个有效的示例代码(使用 '):

package main

import "fmt"
import "regexp"
import "time"

var rgx = regexp.MustCompile(`(\d){4}\/(\d){2}\/(\d){2} (\d){2}:(\d){2}:(\d){2} (\[\w*\]){2} ([\w ])+ &#39.*&#39`)

func main() {
s := time.Now().UTC().Format("2006/01/02 15:04:05") + ` [DEV][INFO] Executing Process &#39Some process&#39 `
r := rgx.FindAllString(s, -1)
fmt.Println(r)
}

输出:

[2016/08/11 18:13:41 [DEV][INFO] Executing Process &#39Some process&#39]

试试这个有效的示例代码(使用 '):

package main

import "fmt"
import "regexp"
import "time"

var rgx = regexp.MustCompile(`(\d){4}\/(\d){2}\/(\d){2} (\d){2}:(\d){2}:(\d){2} (\[\w*\]){2} ([\w ])+ '.*'`)

func main() {
s := time.Now().UTC().Format("2006/01/02 15:04:05") + ` [DEV][INFO] Executing Process 'Some process' `
r := rgx.FindAllString(s, -1)
fmt.Println(r) //

s = `2016/07/27 21:37:50 [DEV][INFO] Executing Process 'Some process'`
r = rgx.FindAllString(s, -1)
fmt.Println(r) // 2016/07/27 21:37:50 [DEV][INFO] Executing Process 'Some process'
fmt.Println()

s = ` dfgfsdfg sdf gsdf gsdf 2016/07/27 21:37:50 [DEV][INFO] Executing Process 'Some process' 2016/07/27 21:37:50 [DEV][INFO] Executing Process 'Some process'`
r = rgx.FindAllString(s, -1)
fmt.Println(r) // [2016/07/27 21:37:50 [DEV][INFO] Executing Process 'Some process' 2016/07/27 21:37:50 [DEV][INFO] Executing Process 'Some process']
fmt.Println()

s = `aaaaaaaaaaaaaaaaa asdfsf 'asdfasdf'`
r = rgx.FindAllString(s, -1)
fmt.Println(r) // []
}

输出;

[2016/08/11 18:09:01 [DEV][INFO] Executing Process 'Some process']
[2016/07/27 21:37:50 [DEV][INFO] Executing Process 'Some process']

[2016/07/27 21:37:50 [DEV][INFO] Executing Process 'Some process' 2016/07/27 21:37:50 [DEV][INFO] Executing Process 'Some process']

[]

关于regex - 无法在正则表达式中捕获单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38899565/

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