-1

可能重复:
用于识别 CamelCased 单词的正则表达式

我正在尝试在文本中检测 CamelCase。在 Rubular 中,我的正则表达式工作正常,但在我的脚本中似乎不起作用。我的正则表达式:http ://rubular.com/r/fbeXAM69dX

我的脚本:recognizers.rb

class NameRecognizer
def recognize(text)
  names = text.scan(NameRegex)
  th = TagHelper.new
  cc = th.isCamelCase?(names)
  cc ? (puts "Camel Case detected in '#{text}'") : (puts "No camel case in '#{text}'")
end
end

在另一个文档中,tag_helpers.rb

class TagHelper
def isCamelCase?(value)
  value = value.join(' ')
  finder = /([A-Z][a-z]+[a-z][A-Z][a-zA-Z]+)/
  value.match(finder) ? bool = true : bool = false
end
end

是骆驼案吗?工作但我的正则表达式检测到错误,所以我不得不改变,所以我知道我的正则表达式的问题。如果有人有想法,我有点绝望。

编辑:这是我的测试

Recognizers::NameRecognizer.new.recognize("Camel Case")
Recognizers::NameRecognizer.new.recognize("NewsItalie")

我正在使用 Ruby 1.8.7

4

2 回答 2

1

您的正则表达式应该是/([A-Z][a-z]+[A-Z][a-zA-Z]+)/,第二个 [az] 是不必要的,并且会排除像“RoBot”这样的匹配项。

于 2012-01-13T18:37:58.207 回答
1

作为杰森答案的附录,主要是因为评论压缩了所有内容:

图案:

r = /^[A-Z]\w+(?:[A-Z]\w+){1,}/x

测试数据:

strs = ["Camelcase", "CamelCase", "camelCase", "camel case", "Camel Case", "Camel case", "CamelCaseLong"]

编码:

strs.each{|s| p s.scan( r ) }

结果:

[]
["CamelCase"]
[]
[]
[]
[]
["CamelCaseLong"]
于 2012-01-13T21:20:10.080 回答