gpt4 book ai didi

java - 将java中的正则表达式转换为golang。纠正我

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

Java 正则表达式:

str.replaceFirst("(\\p{XDigit}{8})(\\p{XDigit}{4})(\\p{XDigit}{4})(\\p{XDigit}{4})(\\p{XDigit}+)", "$1-$2-$3-$4-$5")

我在 Go 中尝试过的:

re:=regexp.MustCompile("(\\p{XDigit}{8})(\\p{XDigit}{4})(\\p{XDigit}{4})(\\p{XDigit}{4})(\\p{XDigit}+)")

repStr := "$1-$2-$3-$4-$5"

str1:=re.ReplaceAllString(someString,repStr)

它说XDigit是一个未知的字符类别

最佳答案

Java regex\p{XDigit} 只是 [0-9a-fA-F] 的简写:

POSIX character classes (US-ASCII only)\p{Lower}               A lower-case alphabetic character: [a-z]\p{Upper}               An upper-case alphabetic character:[A-Z]\p{ASCII}               All ASCII:[\x00-\x7F]\p{Alpha}               An alphabetic character:[\p{Lower}\p{Upper}]\p{Digit}               A decimal digit: [0-9]\p{Alnum}               An alphanumeric character:[\p{Alpha}\p{Digit}]\p{Punct}               Punctuation: One of !"#$%&'()*+,-./:;?@[\]^_`{|}~\p{Graph}               A visible character: [\p{Alnum}\p{Punct}]\p{Print}               A printable character: [\p{Graph}\x20]\p{Blank}               A space or a tab: [ \t]\p{Cntrl}               A control character: [\x00-\x1F\x7F]\p{XDigit}              A hexadecimal digit: [0-9a-fA-F]\p{Space}               A whitespace character: [ \t\n\x0B\f\r]

The same [0-9a-fA-F] character class can be expressed with a [[:xdigit:]] in Go regex.

You may write the Go pattern like

re:=regexp.MustCompile("([[:xdigit:]]{8})([[:xdigit:]]{4})([[:xdigit:]]{4})([[:xdigit:]]{4})([[:xdigit:]]+)")

或者,

re:=regexp.MustCompile("([0-9a-fA-F]{8})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]+)")

您可能会看到 online Go regex demo here这是a Go demo :

package main

import (
"fmt"
"regexp"
)

const sample = `0a1f0a1f0a1f0a1f0a1f0a1f0a1f 0a1f0a1f0a1f0a1f0a1f0a1f0a1f`

func main() {
re := regexp.MustCompile(`([[:xdigit:]]{8})([[:xdigit:]]{4})([[:xdigit:]]{4})([[:xdigit:]]{4})([[:xdigit:]]+)`)
repl := `$1-$2-$3-$4-$5`
fmt.Println(re.ReplaceAllString(sample, repl))
}

结果:0a1f0a1f-0a1f-0a1f-0a1f-0a1f0a1f 0a1f0a1f-0a1f-0a1f-0a1f-0a1f0a1f

请注意,如果您需要替换仅第一次出现(如在 Java 中,您使用的是 String#replaceFirst),您可能希望匹配整个字符串在需要替换的模式之前使用 .*? ,然后在它之后使用 .* 来匹配字符串的其余部分,捕获它们并调整替换字符串以包含字符串的这两个附加部分的占位符:

re:=regexp.MustCompile("^(.*?)([[:xdigit:]]{8})([[:xdigit:]]{4})([[:xdigit:]]{4})([[:xdigit:]]{4})([[:xdigit:]]+)(.*)$")
repStr := "$1$2-$3-$4-$5-$6$7"

参见 another regex demo .

关于java - 将java中的正则表达式转换为golang。纠正我,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52516475/

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