如何检测此线的存在?
这个问题与我刚才在这里提到的前一个问题有关,所以如果大部分语言看起来相似的话,请原谅我。
我有一个有多行的字符串。 我正在做的是检查每一行的具体特征,然后相应地对待它们。
- 一个特征是如果该行以
+
或a开头。 这很好用。 - 另一个特点是,如果它只包含一个
\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",
在这个特定的例子中,我试图找出第二行。
这是一个实例,其中与纯字符串匹配参数匹配的字符串将被取消资格,因为它们来自以-
或a +
开头的字符串。
" #\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
为了更清楚地说明我在寻找什么。 基本上我已经将字符串分成了一堆行,然后我在每一行迭代。
所以这就是我所做的:
所以我想要做的是修改上面的if
语句集以适应这个最新的行检查,或者通过添加另一个elsif
条件找到一些方法来检查它….虽然考虑到我需要知道发生了什么if
没有修改这个if
语句,我没有看到如何做到这一点。
str = [ "+ Reflection ...\n", " end\n", " \n", "- habtm_reflection = ...\n"].join str[/(^[+-].*$)\n(?!\n)(^[^+-].*$)/, 2] #⇒ " end"
正则表达式基本上查找以+
ot开头的行-
(带(^[+-].*$)
),跳过\n
然后将未启动的行与+
或-
中的一行匹配( with (^[^+-].*$)
。)