Regex 正则表达式用于测试Go中的拉丁字母

Regex 正则表达式用于测试Go中的拉丁字母,regex,go,unicode,Regex,Go,Unicode,我正试着在Go to test中只为拉丁字母写一个正则表达式 我知道\p{Latin}与任何拉丁文字字符匹配,但它也与罗马数字(例如ⅻ"). 这让我想到了\p{L},它匹配Unicode字母,但它匹配任何脚本,而不仅仅是拉丁语 到目前为止,我能提供的最好的正则表达式是两个带有&&: latinRe := regexp.MustCompile(`\p{Latin}`) letterRe := regexp.MustCompile(`\p{L}`) if latinRe.Matches(testS

我正试着在Go to test中只为拉丁字母写一个正则表达式

我知道
\p{Latin}
与任何拉丁文字字符匹配,但它也与罗马数字(例如ⅻ"). 这让我想到了
\p{L}
,它匹配Unicode字母,但它匹配任何脚本,而不仅仅是拉丁语

到目前为止,我能提供的最好的正则表达式是两个带有
&&

latinRe := regexp.MustCompile(`\p{Latin}`)
letterRe := regexp.MustCompile(`\p{L}`)
if latinRe.Matches(testString) && letterRe.Matches(testString) {...}
我不高兴我不能用类似的东西轻松地测试它。
是否有更好的方法?更简洁?性能?

您可以使用如下范围来指定要匹配的所有字符。根据正则表达式引擎的不同,以下其中一种方法应该有效:

:改编自

另一个选项是否定Unicode字符类中的特定字符:


谢谢。我喜欢第二个,它比较懒。注意:我认为
\P{L}
相当于我原来的正则表达式,而不是
\P{N}
。它基本上是de morgan应用于我的
拉丁语和莱特尔=!(!拉丁语|莱特尔)
\P{x}是
\P{x}和
\P{L}的相反
是任何脚本中的任意字母,而
\p{N}
是任何脚本中的任意数字。但是,是的,它正是这样做的。
[A-Za-z\u00C0-\u00D6\u00D8-\u00f6\u00f8-\u00ff]
[A-Za-z\xC0-\xD6\xD8-\xf6\xf8-\xff]
[^\P{Latin}\p{N}]