将java中的正则表达式转换为golang。纠正我
Java正则表达式:将java中的正则表达式转换为golang。纠正我,java,regex,go,Java,Regex,Go,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}+)") rep
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是一个未知字符类别在中,\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]
或者
您可以看到以下内容:
结果:0a1f0a1f-0a1f-0a1f-0a1f0a1f-0a1f0a1f-0a1f-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"
参见。在中,\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]
或者
您可以看到以下内容:
结果:0a1f0a1f-0a1f-0a1f-0a1f0a1f-0a1f0a1f-0a1f-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"
请参阅。您可以检查正则表达式是否正确以及它在链接中的控制流。根据您可以使用
[:xdigit:]
(而不是\\p{xdigit}
)@WiktorStribiżew它只是一(半)行,您可以将它集成到yours@CarlosHeuberger好,看,,谢谢。您可以检查正则表达式是否正确,以及它在链接中的控制流。根据您可以使用[:xdigit:]
(而不是\\p{xdigit}
)@WiktorStribiżew它只是一(半)行,您可以将它集成到yours@CarlosHeuberger好,看,,谢谢。请考虑一下“Carlos Heuberger评论”。不必亲自发表。不确定,但是<代码> [[X:Digi]:] /代码>只是一个标记,<代码> [AF F-F09] < /代码>可能有点复杂(执行明智),而后一个更传统,应该工作,不管哪一个正则表达式,请考虑“Carlos Heuberger评论”。不必发布它自己。不确定,但是[:xdigit:][]
只是一个标记,[a-fA-F0-9]
可能更复杂一些(从实现角度来看),而后者更传统,无论使用哪种正则表达式都应该有效
re:=regexp.MustCompile("^(.*?)([[:xdigit:]]{8})([[:xdigit:]]{4})([[:xdigit:]]{4})([[:xdigit:]]{4})([[:xdigit:]]+)(.*)$")
repStr := "$1$2-$3-$4-$5-$6$7"