tl; dr:如何在Ruby中的正则表达式匹配中仅替换特定字符(即换行符)?
我有一个字符串数组。数组的每个元素都有2到4个单词(=任何字符序列),除以特定序列中的空格。
我还有一个大字符串,我想要检查那些被\ n而不是空格分隔的单词序列的实例。例如,我想匹配数组的元素:
arr[0] = "aaa bbbb ccccc"
到一个看起来像这样的字符串:
zzzzzzzzz aaa\n
bbbb ccccc yyyyyyyyy
让它看起来像这样:
zzzzzzzzz aaa bbbb ccccc yyyyyyyyy
问题是,我至少可以想到两种方法,但它们看起来非常麻烦。我会做的是:
编辑:如何使用regexp.union实现以下答案?我有一个生成正则表达式的函数:
def generateMergeRx(arr_with_keywords)
arr_with_keywords.delete_if{|x| (x.include? " ") == false}
matchRegexMerge = Regexp.new("(%{keywordReplace})" % {
keywordReplace: Regexp.union(arr_with_keywords).source
})
end
这就像使用puts regexMerge.to_s:
一样(?-mix:(And\.\ z\ Kobyl\.|Ban\.\ W\.|B\.\ B\.|B\.\ G\.|Biel\.\ J\.)
它对应于:
And. z Kobyl.
Ban. W.
B. B.
B. G.
Biel. J.
(...)
然后我这样称呼它:
regexMerge = generateMergeRx arr_with_keywords
some_string.gsub!(regexMerge.to_s.gsub!(/ /, "\s"), "\\1")
但是我应该把它代替\ 1?因为此时输入=输出。
答案 0 :(得分:2)
▶ str = 'zzzzzzzzz aaa
▷ bbbb ccccc yyyyyyyyy'
▶ re = "aaa bbbb ccccc"
▶ str.gsub /#{re.gsub(/ +/, '\s+')}/, re
#⇒ "zzzzzzzzz aaa bbbb ccccc yyyyyyyyy"
一般的想法是匹配任何空格,包括\n
,并用原始字符串替换它们。