字符串的格式是以下任何一种......语言是ruby
#word > subcategory
#word word > sub / category
#word > sub category
#word word > subcategory
我只想匹配“单词”或“单词单词”(两个单词带空格)
到目前为止,我有这个,但它与空间不匹配
scan(/#([^ ]*)/)[0]
此外,对于第二个,它似乎正在工作,但某些短语不匹配,即使它们是相同的。我不知道为什么。以下是否有问题? (这是为了匹配“子类别”或“子类别”
scan(/.* > (.*)$/)[0]
第一部分只是字母,第二部分可以有任意数量的空格,单词,字符,如/或_
答案 0 :(得分:3)
试试这个:
^#([^>]*)
[^>]*
将匹配任何内容,直到第一个>
(或文本末尾)
^
并不是真的需要,但它可以保护您免受错误(例如,如果类别包含另一个哈希符号)
工作示例:http://rubular.com/r/LO6T9AV3rp
请注意,您可以在同一场比赛中匹配单词和类别,例如,使用模式:
^#([^>]*)>(.*)$
您可以捕获这两个组并使用它们:
s = "#word word > sub / category"
m = s.scan(/^#([^>]*)>(.*)$/)
puts m[0]
puts m[1]
答案 1 :(得分:2)
我不太明白你的问题。
您想以“#XXX> YYY”的形式重审XXX和YYY吗?
在这种情况下,遵循正则表达式将有所帮助:
scan(/#([^>]*?) *> *(.*)$/)
例如:
> "#world world > sub / category".scan(/#([^>]*?) *> *(.*)$/)
=> [["world world", "sub / category"]]