gpt4 book ai didi

ruby - 为什么这个正则表达式不适用于 Ruby

转载 作者:数据小太阳 更新时间:2023-10-29 07:55:21 24 4
gpt4 key购买 nike

尝试匹配散列字符失败,但对任何其他成员都成功正则表达式。

为什么会失败?

谢谢,

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('#')

最佳答案

如评论中所述,您的问题是 \b是正则表达式中的单词边界(除非它在字符类中,唉,\b 中的 /[\b]/ 就像在双引号字符串中一样是退格键)。一个词的边界大致是

a word character on one side and nothing or a non-word character on the other side

但是#不是单词字符所以/\b/无法匹配 '#'根本无法匹配您的整个正则表达式。

您将不得不更明确地说明您要匹配的内容。第一个刺是“字符串或空格的开头”而不是第一个 \b和“字符串或空格的结尾”而不是第二个 \b .可以这样表达:

unit_regex = '(?<=\A|\s)(' + UNIT.to_a.join('|') + ')(?=\z|\s)'

请注意,我已切换到单引号以避免所有双重转义麻烦。 ?<=是一个正面回顾,这意味着(\A|\s)需要在那里,但它不会被表达式匹配;同样,?=是一个正面前瞻。参见 the manual更多细节。另请注意,我们正在使用 \A而不是 ^^匹配的开头而不是字符串;同样,\z而不是 $因为\z匹配 string 的结尾,而 $匹配的结尾。

您可能需要根据您的数据调整正则表达式,但希望这能让您入门。

关于ruby - 为什么这个正则表达式不适用于 Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34487109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com