尝试匹配哈希字符失败,但对任何其他成员都成功 正则表达式。
为什么这会失败?
谢谢,
乔
UNIT = [ 'floor', 'fl', '#', 'penthouse', 'mezzanine', 'basement', 'room' ]
unit_regex = "\\b(" + UNIT.to_a.join("|") + ")\\b"
unit_regexp = Regexp.new(unit_regex, Regexp::IGNORECASE)
x=unit_regexp.match('#')
答案 0 :(得分:4)
如评论中所述,您的问题是\b
是正则表达式中的单词边界(除非它在字符类中,叹息,\b
中的/[\b]/
是一个退格就像在双引号字符串中一样)。字边界大致是
一边是单词字符,另一边没有字或非字字符
但#
不是单词字符,因此/\b/
根本无法与'#'
匹配,而且整个正则表达式无法匹配。
你必须更清楚地了解你想要匹配的东西。第一个stab将是“字符串或空格的开头”而不是第一个\b
和“字符串或空格的结尾”而不是第二个\b
。这可以这样表达:
unit_regex = '(?<=\A|\s)(' + UNIT.to_a.join('|') + ')(?=\z|\s)'
请注意,我已切换到单引号以避免所有双重逃避麻烦。 ?<=
是一个肯定的后瞻,这意味着(\A|\s)
需要在那里,但它不会被表达式匹配;类似地,?=
是正向前瞻。有关详细信息,请参阅the manual。另请注意,我们使用\A
而不是^
,因为^
匹配行的开头而不是字符串;同样,\z
代替$
,因为\z
匹配字符串的结尾,而$
匹配行的结尾
您可能需要根据您的数据调整正则表达式,但希望这可以帮助您入门。