标签: substitution

Perl替换操作符的作用是什么?

多年来,我一直在Perl中编程,不过几年,虽然只是偶尔使用它是我的主要语言.因为我经常在几个月没有写任何perl,所以我非常依赖我的狗耳骆驼书来提醒我如何做事.然而,当我逐字逐句地复制食谱时,这让我感到困扰.这是最令人头疼的问题之一:在第3版Camel的第154页,有一个"修改字符串en passant的例子,其内容如下:

($lotr = $hobbit) =~ s/Bilbo/Frodo/g;
Run Code Online (Sandbox Code Playgroud)

Q1)这里发生了什么?究竟什么是正则表达式运作?

Q2)这种近乎神奇的语法是否需要这样的基本操作:"从$ a中取一个字符串,用正则表达式修改它,将结果放在$ b中"?

Q3)如何使用循环默认变量作为初始字符串来执行此操作?

向Perl梦想家道歉,上面看起来非常自然.

regex perl substitution

13
推荐指数
2
解决办法
3395
查看次数

用空字符串替换:意外结果

为什么两个打印的数字不同?

#!/usr/bin/env perl
use warnings;
use 5.10.1;

my $sep = '';
my $number = 110110110110111;

$number =~ s/(\d)(?=(?:\d{3})+\b)/$1$sep/g;
say "A: <$number>";

$number =~ s/\Q$sep\E//g;
say "B: <$number>";
Run Code Online (Sandbox Code Playgroud)

输出:

A: <110110110110111>
B: <11111111111>
Run Code Online (Sandbox Code Playgroud)

string perl substitution

13
推荐指数
1
解决办法
813
查看次数

如何在Excel中组合多个嵌套替换函数?

我正在尝试设置一个函数来重新格式化一个稍后将被连接的字符串.示例字符串如下所示:

Standard_H2_W1_Launch_123x456_S_40K_AB
Run Code Online (Sandbox Code Playgroud)

虽然有时" S "不存在,有时"40K"是"60K"或不存在,"_ AB"也可以是"_CD"或_"EF".最后,所有下划线都需要更改为连字符.最终产品应如下所示:

Standard-H2-W1-Launch-123x456-
Run Code Online (Sandbox Code Playgroud)

我有四个函数,如果一个接一个地运行将负责所有这些:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"_AB","_"),"_CD","_"),"_EF","_")

=SUBSTITUTE(SUBSTITUTE(B2,"_40K",""),"_60K","")

=SUBSTITUTE(C2,"_S_","_")

=SUBSTITUTE(D2,"_","-")
Run Code Online (Sandbox Code Playgroud)

我已经尝试了将这些组合成一个函数的多种方法,但我对这个级别的excel相对较新,所以我很茫然.无论如何要将所有这些结合起来,以便它在一个单元格中执行另一个命令吗?

excel nested excel-formula substitution nested-function

13
推荐指数
1
解决办法
9万
查看次数

使用data.table作为参数在函数内使用deparse(substitute())

如果我想将函数的参数解析为错误或警告,如果参数转换为函数中的data.table,则会发生奇怪的事情:

e <- data.frame(x = 1:10)
### something strange is happening
foo <- function(u) {
  u <- data.table(u)
  warning(deparse(substitute(u)), " is not a data.table")
  u
}
foo(e)

##  foo(e)
##      x
##  1:  1
##  2:  2
##  3:  3
##  4:  4
##  5:  5
##  6:  6
##  7:  7
##  8:  8
##  9:  9
## 10: 10
## Warning message:
## In foo(e) :
##   structure(list(x = 1:10), .Names = "x", row.names = c(NA, -10L), class …
Run Code Online (Sandbox Code Playgroud)

r substitution data.table

13
推荐指数
1
解决办法
1304
查看次数

在VIM中,是否可以在替换子句中使用所选文本而无需重新输入?

假设我在视觉模式中选择了一个单词.我想使用s //在文件中对该单词和该单词的所有其他实例进行替换.有没有办法在部件中使用突出显示的文本s/<here>/stuff/而无需重新键入?

vim substitution

12
推荐指数
1
解决办法
384
查看次数

使用Page.Render覆盖进行缓存后替换

上下文

我有一个Asp .Net Web应用程序,其中一些页面继承自基类"BasePage".这个BasePage类继承自System.Web.ui.Page并且我覆盖了Render方法,这样我就可以在将HTML流发送到客户端浏览器之前拦截它.

这是我的Render方法的代码:

protected override void Render(HtmlTextWriter writer){

    MemoryStream memoryStream = new MemoryStream();

    try
    {
        using (StreamWriter streamWriter = new StreamWriter(memoryStream))
        {
            var textWriter = new HtmlTextWriter(streamWriter);
            base.Render(textWriter);
            textWriter.Flush();
            memoryStream.Position = 0;

            using (StreamReader reader = new StreamReader(memoryStream))
            {
                string finalHtml = reader.ReadToEnd();

                // Processing filters
                finalHtml = FilterManager.ProcessFilters(finalHtml);

                // Writing output to client
                writer.Write(finalHtml);
                reader.Close();
            }
        }
    }
    catch(ObjectDisposedException)
    {

    }
    finally
    {
        memoryStream.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.有用.我没有使用响应过滤功能的原因是我知道它与Post-cache替换不兼容

是.我也想使用outputcache替换.出于测试目的,我在aspx页面中添加了一个小的asp .net控件:

<asp:Substitution runat="server" id="UnCachedArea" methodname="GetFreshDateTime" /> …
Run Code Online (Sandbox Code Playgroud)

asp.net outputcache substitution

12
推荐指数
1
解决办法
1281
查看次数

在R中创建表达式树

替代函数以R树的形式创建一个可以解析的语言对象.如何使用列表从头开始创建树,否则将其提供给eval?

# substitute gives a tree representation of the expression
a=1; b=2;
e1 = substitute(a+2*b)
eval(e1)      #gives 5 as expected
e1            # is type language
e1[[1]]       # this is `+`
e1[[2]]       # this is 'a' type symbol
e1[[3]]       # this is type language
e1[[3]][[1]]  # this is `*`  etc....
Run Code Online (Sandbox Code Playgroud)

我想知道如何以e1编程方式重建对象.理想情况下,我创建了一个复杂列表的对象,其中包含正确的对象,也许我会as.languagelist对象上调用一些对象.然而,这不起作用.例如:

# how to construct the tree?
eval(list(as.symbol('+'),1,1))                # does not return 2
eval(as.expression(list(as.symbol('+'),1,1))) # does not return 2
Run Code Online (Sandbox Code Playgroud)

一种方法是生成字符串'1 + 1'然后解析它,但是当你首先拥有树时,生成字符串以再次解析它们似乎并不优雅!

eval(parse(text='1+1')) …
Run Code Online (Sandbox Code Playgroud)

tree eval r substitution

12
推荐指数
2
解决办法
1812
查看次数

在Perl s /// g中发生了多少次替换?

小例子:

perl -e '$s="aaabbcc";$c=()=$s=~/a/g;print"$c\n$s\n"' (m // g)输出

3
aaabbcc
Run Code Online (Sandbox Code Playgroud)

perl -e '$s="aaabbcc";$c=()=$s=~s/a/x/g;print"$c\n$s\n"'(s /// g)输出

1
xxxbbcc
Run Code Online (Sandbox Code Playgroud)

我想一次做两件事而不必先匹配:替换并知道替换的数量.显然,/// g不会返回标量上下文中的替换次数 - 与m // g匹配时不同.这可能吗?如果有,怎么样?

perlre,perlvar和perlop没有提供任何帮助(或者我找不到它).

regex perl substitution

11
推荐指数
1
解决办法
7609
查看次数

typesafe配置替换相对路径

有没有办法在替代中使用相对路径而不是绝对路径?我想写这个,这不起作用:

service {
  password = "qwerty"
  url = "http://example.com?user=John&password="${password}
}
Run Code Online (Sandbox Code Playgroud)

仅适用于此案例:

service {
  password = "qwerty"
  url = "http://example.com?user=John&password="${service.password}
}
Run Code Online (Sandbox Code Playgroud)

substitution typesafe-config

11
推荐指数
0
解决办法
517
查看次数

perl中的内联正则表达式替换

有没有办法用正则表达式内联替换文本,而不是从变量中取出文本并将其存储在变量中?

我是初学者.我经常发现自己写作

my $foo = $bar;
$foo =~ s/regex/replacement/;
doStuff($foo)
Run Code Online (Sandbox Code Playgroud)

我真的很想写的地方

doStuff($bar->replace(s/regex/replacement/));
Run Code Online (Sandbox Code Playgroud)

或者类似,而不是使用临时变量和三行.

有没有办法做到这一点?显然,当正则表达式足够复杂时,将它拆分出来以便更好地解释是有意义的,但是当它只是s/\s//g用其他变量使代码混乱时感觉是错误的.

regex perl substitution

10
推荐指数
3
解决办法
9989
查看次数