这个问题与前一篇asked here有关,请原谅我,如果大部分语言看似相似的话。
我有一个包含多行的字符串。我正在做的是检查每一行的具体特征,然后相应地对其进行处理。
+
或-
开头。这很好。\n
,Ilya帮我弄清楚如何检测这些线条,这样做很好。-
或+
开头的行后面。 脱离上下文,这是我想要找到的有效字符串的示例:" end\n",
但是,这是一个更完整的示例,位于以+
或-
开头的行之后。
"+ Reflection.add_reflection self, name, reflection\n",
" end\n",
" \n",
"- habtm_reflection = ActiveRecord::Reflection::HasAndBelongsToManyReflection.new(name, scope, options, self)\n",
在这个特定的例子中,我试图找出第二行。
这是一个实例,其中与纯字符串匹配参数匹配的字符串将被取消资格,因为它们来自以-
或+
开头的字符串。
" #\n",
" # All of the association macros can be specialized through options. This makes cases\n",
" # more complex than the simple and guessable ones possible.\n",
"- module ClassMethods\n",
我希望这很清楚。
修改1
为我所寻找的内容提供更清晰的信息。基本上我已经将字符串分成了一堆行,然后我在每一行迭代。
所以这就是我所做的:
<% diff.body.lines.each do |dl| %>
<% if dl.start_with?("-") %>
<% elsif dl.start_with?("+") %>
<% elsif dl.strip.empty? %>
<% end %>
<% end %>
所以我想做的是修改上面的if
语句集以适应这种最新的行检查,或者通过添加另一个elsif
条件找到一些方法来检查它。虽然考虑到我需要知道上面的行发生了什么,但我没有看到如何在不修改if
声明的情况下这样做。
答案 0 :(得分:2)
str = [
"+ Reflection ...\n",
" end\n",
" \n",
"- habtm_reflection = ...\n"].join
str[/(^[+-].*$)\n(?!\n)(^[^+-].*$)/, 2]
#⇒ " end"
正则表达式基本上会查找以+
ot -
(带(^[+-].*$)
)开头的行,跳过\n
,然后匹配该行不是以+
或-
((^[^+-].*$)
之一)开始的。)