我正在使用gsub的正则表达式有问题。我的程序中有问题的部分会加载两个文本文件:一个将处理,另一个作为缩写数组。问题是我想删除任何缩写之前或之后的任何\n
(我故意将它们分开)。这不是一个真正的问题,我的解决方案有效,但缩写可能是大写或小写,而我的列表只包含一个版本(混合大小写)。
除大/小写问题外,该功能正常。我在gsub中将::IGNORECASE
添加到正则表达式中,但它似乎没有改变任何东西。下面是我的函数,它获取一个字符串数组:
def generateRegexes(some_array)
matchRegexPrefix = Regexp.new("\n(%{abbrevReplace})" % {
abbrevReplace: Regexp.union(some_array)
}, Regexp::IGNORECASE)
matchRegexSuffix = Regexp.new("(%{abbrevReplace})\n" % {
abbrevReplace: Regexp.union(some_array)
}, Regexp::IGNORECASE)
return [matchRegexPrefix, matchRegexSuffix]
end
以下是我如何调用该函数:
regexAbbrev = generateRegexes listOfAbbreviations
stringToBeFixed.gsub!(regexAbbrev [0], " \\1")
stringToBeFixed.gsub!(regexAbbrev [1], "\\1 ")
我想要发生的是,无论大小写,我的方法都会匹配\nAbbrev
或Abbrev\n
,并将空格替换为空格,同时将缩写保留为原始格式。
编辑:提供所要求的信息(不要介意波兰语乱码)。
输入部分:
Fum, u, lm. y 1. † dym, wyziew, para: Fumy do głowy z picia biją.
Troc. 2. † pachnidło, perfumy, kosmetyk.
Zdr. † Fumik. <Łć. fumus>
× Fungować, uje, ował sprawować urząd, wypełniać obowiązki: Funguje jako poseł królewski.
Szuj. <Łć. fungi>
Funkcja, i, lm. e 1. sprawa załatwiania. Zdr.
Funkcyjka. <Łć. functio>
缩写列表的部分:
Troc.
Szuj.
zdr.
预期产出:
Fum, u, lm. y 1. † dym, wyziew, para: Fumy do głowy z picia biją. Troc. 2. † pachnidło, perfumy, kosmetyk. Zdr. † Fumik. <Łć. fumus>
× Fungować, uje, ował sprawować urząd, wypełniać obowiązki: Funguje jako poseł królewski. Szuj. <Łć. fungi>
Funkcja, i, lm. e 1. sprawa załatwiania. Zdr. Funkcyjka. <Łć. functio>
我实际获得的输出(我想要的一半):
Fum, u, lm. y 1. † dym, wyziew, para: Fumy do głowy z picia biją. Troc. 2. † pachnidło, perfumy, kosmetyk.
Zdr. † Fumik. <Łć. fumus>
× Fungować, uje, ował sprawować urząd, wypełniać obowiązki: Funguje jako poseł królewski. Szuj. <Łć. fungi>
Funkcja, i, lm. e 1. sprawa załatwiania. Zdr.
Funkcyjka. <Łć. functio>
答案 0 :(得分:2)
您可以做的另一件事是使用Regexp.union
来手动构建Regexp源:
pattern = some_array.map(&Regexp.method(:escape)).join('|')
text.gsub(/\n(#{pattern})/i, ' \1').gsub(/(#{pattern})\n/i, '\1 ')
输出:
Fum, u, lm. y 1. † dym, wyziew, para: Fumy do głowy z picia biją. Troc. 2. † pachnidło, perfumy, kosmetyk. Zdr. † Fumik. <Łć. fumus>
× Fungować, uje, ował sprawować urząd, wypełniać obowiązki: Funguje jako poseł królewski. Szuj. <Łć. fungi>
Funkcja, i, lm. e 1. sprawa załatwiania. Zdr. Funkcyjka. <Łć. functio>
答案 1 :(得分:1)
Regexp.union
无法指定与Regexp.new
不同的选项。因此,返回的正则表达式没有启用选项:
Regexp.union(%w(a b c)).options # => 0
如果结果转换为Regexp#to_s
类似String#%
的字符串,也可以观察到这一点(注意扩展组的显式选项):
Regexp.union(%w(a b c)).to_s # => "(?-mix:a|b|c)"
这意味着当您隐式执行此方法时,将继承选项。
您可以在Regexp.union
编译的正则表达式上调用Regexp#source
。其返回值不包含关于扩展组内容的选项(?-mix:
和)
:
Regexp.union(%w(a b c)).source # => "a|b|c"