【发布时间】:2017-10-20 18:17:29
【问题描述】:
我使用的是 Ruby 2.4。我想匹配一堆非字母和数字,然后是一个或多个数字,然后是任意数量的非字母和数字。但是,这个字符串
2.4.0 :001 > token = "17 Milton,GA"
=> "17 Milton,GA"
...
2.4.0 :004 > Regexp.new("\\A([[:space:]]|[^\p{L}^0-9])*\\d+[^\p{L}^0-9]*\\z").match?(token.downcase)
=> true
与我的正则表达式匹配,我不希望它匹配,因为数字后面有字母。我需要在我的正则表达式中进行什么调整,以便在数字之后我唯一可以匹配的是非字母和非数字?
【问题讨论】:
-
非字母,非数字后面一堆数字
(?<=\d)[\W_]+ -
你匹配
[^\p{L}^0-9]是什么意思?除了字母和数字之外的任何字符?试试/\A[^[:alnum:]]*\d+[^[:alnum:]]*\z/。顺便说一句,我认为如果您在\p=>\\p中添加反斜杠,您的正则表达式可能会起作用,因为您在Regexp.new构造函数中使用双引号字符串文字而不是正则表达式文字。
标签: ruby regex alphanumeric non-alphanumeric