小编mat*_*ths的帖子

sed和python正则表达式之间的不一致

如果这是在某个地方发布我道歉,但我粗略的搜索没有发现任何东西.

在做一些Python编程时,我注意到以下命令:

re.sub("a*((ab)*)b", r"\1", "aabb")
Run Code Online (Sandbox Code Playgroud)

返回空字符串.但是sed中的等效命令:

echo "aabb" | sed "s/a*\(\(ab\)*\)b/\1/"
Run Code Online (Sandbox Code Playgroud)

回报ab.

我觉得python正则表达式开头的"a*"指令与两者都匹配a,导致"(ab)*"匹配零次,但我不知道sed是如何出现的ab.有谁知道造成这种情况的两个正则表达式引擎之间有什么区别?我相信它们都默认贪婪地匹配星星,但我发现sed可能从右边而不是左边匹配.任何见解将不胜感激.

python regex sed

15
推荐指数
1
解决办法
908
查看次数

Ruby的块语法的起源是什么?

Ruby对块有一种有趣的语法(管道之间的参数,后跟一系列语句):

[1, 2, 3].each do |x|
    puts x
end
Run Code Online (Sandbox Code Playgroud)

Rust也使用类似的语法:

arr.sort_by_key(|a| {
    let intermediate_value = some_function(a);
    intermediate_value + 10
});
Run Code Online (Sandbox Code Playgroud)

我想知道这种语法是否早于Ruby(特别是在管道之间放置参数,我相信我在其他地方也看到过,但不确定在哪里),如果是的话,什么语言使用它?

我相信Smalltalk也使用管道,但用于对象初始化,在Google上找不到其他示例。

谢谢!

ruby syntax programming-languages

3
推荐指数
1
解决办法
100
查看次数

标签 统计

programming-languages ×1

python ×1

regex ×1

ruby ×1

sed ×1

syntax ×1