Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我使用分组时,如何使用gsub在Ruby正则表达式(regex)中进行反向引用?_Ruby_Regex_Reference_Gsub_Backreference - Fatal编程技术网

当我使用分组时,如何使用gsub在Ruby正则表达式(regex)中进行反向引用?

当我使用分组时,如何使用gsub在Ruby正则表达式(regex)中进行反向引用?,ruby,regex,reference,gsub,backreference,Ruby,Regex,Reference,Gsub,Backreference,我想修补一些从网页中提取的文本数据。 样本: 第二句末尾的点后面没有空格。这表明第三句话在原始文档的单独一行中(在br标记之后) 我想使用此regexp将“\n”字符插入正确的位置并修补我的文本。 我的正则表达式: t2=t.gsub(/([.\!?])([A-Z1-9])/,$1+"\n"+$2) 但不幸的是,它不起作用:“NoMethodError:nil:NilClass的未定义方法”+” 如何正确地反向引用匹配的组? 在Microsoft Word中非常简单,我只需使用\1和\2符号。

我想修补一些从网页中提取的文本数据。 样本:

第二句末尾的点后面没有空格。这表明第三句话在原始文档的单独一行中(在br标记之后)

我想使用此regexp将“\n”字符插入正确的位置并修补我的文本。 我的正则表达式:

t2=t.gsub(/([.\!?])([A-Z1-9])/,$1+"\n"+$2)
但不幸的是,它不起作用:“NoMethodError:nil:NilClass的未定义方法”+” 如何正确地反向引用匹配的组?
在Microsoft Word中非常简单,我只需使用\1和\2符号。

您可以使用
\1
在替换字符串中反向引用(以匹配捕获组1)

  • 如果使用的是
    gsub(regex,replacement)
    ,则使用
    '\1'
    '\2'
    。。。指的是比赛。确保不要在替换的
    前后加上双引号,或者像约书亚的回答那样避开反斜杠。从
    '\1'
    到匹配的转换将在
    gsub
    中完成,而不是通过文字解释
  • 如果您使用的是
    gsub(regex){replacement}
    ,则使用
    $1
    $1
但对于您的情况,不使用匹配项更容易:

t2 = t.gsub(/(?<=[.\!?])(?=[A-Z1-9])/, "\n")

t2=t.gsub(/(?如果您是因为Rubocop抱怨“避免使用Perl风格的backref.”而来到这里的,大约$1、$2等。您可以这样做:

some_id = $1
# or
some_id = Regexp.last_match[1] if Regexp.last_match

some_id = $5
# or
some_id = Regexp.last_match[5] if Regexp.last_match
它也会希望你这样做

%r{//}.match(some_string)
而不是

some_string[//]

Lame(Rubocop)

他将不得不使用双引号来获得换行符或
'\1'+“\n”+'\2'
@muistooshort该OP最初使用的是
+
,所以你给出的是我的想法。编号的全局(
$1
$2
,…)在第二个参数求值时未设置它们,它们由
gsub
在它屈服于块之前设置。因此,sawa建议何时使用
'\1'
以及何时使用
$1
%r{//}.match(some_string)
some_string[//]