我正在尝试查找小写字符的所有实例,每个字符由每边的三个大写字符包围。然后我想打印这种模式的每一个出现。这是python挑战中的挑战。这就是我所拥有的:
contents = "XXXiXXXjXXX"
contents.scan(/[^A-Z]*[A-Z]{3}[a-z][A-Z]{3}[^A-Z]*/) { |i| print i[3] }
仅在打印"i"
时打印"ij"
。我的正则表达式有什么问题?
答案 0 :(得分:0)
有几件事是错误的,解释错误是不切实际的。
如果您不需要使用单个正则表达式,这是一个简单的方法:
puts " #{contents} ".split(/[A-Z]{3}/).&(("a".."z").to_a).join
答案 1 :(得分:0)
2件事。
[^A-Z]*
没有做任何事情一个有点复杂的环视解决方案:
re = /
(?<=[A-Z]{3}) # 3 uppers behind
(?<![A-Z]{4}) # but not 4
[a-z] # one lower
(?=[A-Z]{3}) # 3 uppers ahead
(?![A-Z]{4}) # but not 4
/x
'XXXiXXXjXXX'.scan re
#=> ["i", "j"]
答案 2 :(得分:-1)
如果删除前/后标准导致它不匹配,则正则表达式有效。然后,您应该将parens作为捕获组添加到要提取的值周围,如下所示:
match = contents.match(/[A-Z]{3}([a-z])[A-Z]{3}/)
match[1] if match