Scheme中的正则表达式

Scheme中的正则表达式,scheme,racket,Scheme,Racket,当我需要检测由两个数字分隔的-时,我对正则表达式在scheme中的工作方式感到困惑 #px"[[:digit:]]-" 这是我如何找到后跟-的数字的方法,但当我尝试这样做时会出现错误 #px"[[:digit:]-[:digit:]]" 字符类由两侧的两个方括号包围。在第二个表达式中,字符类的每个内侧上只有一个方括号。您需要这样做: #px"[[:digit:]]-[[:digit:]]" 另一方面,仅使用完整的POSIX字符类来匹配数字有点冗长。由于它非常常见,您只需使用\d来匹配一个数

当我需要检测由两个数字分隔的
-
时,我对正则表达式在scheme中的工作方式感到困惑

#px"[[:digit:]]-"
这是我如何找到后跟
-
的数字的方法,但当我尝试这样做时会出现错误

#px"[[:digit:]-[:digit:]]"

字符类由两侧的两个方括号包围。在第二个表达式中,字符类的每个内侧上只有一个方括号。您需要这样做:

#px"[[:digit:]]-[[:digit:]]"
另一方面,仅使用完整的POSIX字符类来匹配数字有点冗长。由于它非常常见,您只需使用
\d
来匹配一个数字即可。记住也要避开反斜杠:

#px"\\d-\\d"

这回答了我的问题,我投了赞成票。话虽如此,我更喜欢看到(也更喜欢)
#px“\\d-\\d”
。(就像POSIX
[:digit:]
\\d
只对
#px
有效,而不是
#rx
)@GregHendershott我也考虑过这一点,我想提一下,但我最初写这个答案时没有时间。不过,我会在中编辑它,谢谢你的建议。非常感谢!结果很好。作为一个侧面,我该如何替换“5-5”变成“5-5”呢5@5“,使用regexp replace或类似的东西?@user879559您可能应该看看。如果你需要更多的帮助,请随意问另一个问题,但你可能会从那里找到答案。